Discuss / Python / getattr不起作用

getattr不起作用

Topic source

T800GHB

#1 Created at ... [Delete] [Delete and Lock User]

您好,我遇到了一个非常奇怪的问题,请您给予帮助。

class car(object): def init(self, brandmark, s = 0.0): self.brandmark = brandmark
self.
speed = s
@property def speed(self): return self.speed @speed.setter def speed(self, speed): if not isinstance(speed, float): raise ValueError('Speed must be a float point.') if speed < 0 or speed > 500: raise ValueError('Speed is not on correct range') self.speed = speed
@property def brandmark(self): return self.brandmark
def
getattr__(self, attr): if attr == 'horsepower': return 1000 raise AttributeError("Car object has no attribute %s" %attr)

以上是我定义的一个car类,下面的代码用于测试 c = car('Benz')
c.speed = 300.0 print('Car speed is :', c.speed) print('The brandmark of car is :', c.brandmark)
c.horsepower = 500 print('The horsepower of car is :', c.horsepower) c.type = 'truck' print('The type of car is :', c.type)

输出结果为
Car speed is : 300.0
The brandmark of car is : Benz
The horsepower of car is : 500
The type of car is : truck

如果按照上文的教程最后一条语句执行前不是应该抛出异常吗?因为type属性不存在。

还有一点不明白,这些特殊的属性XXX_都是从哪里找到的?我在使用dir(object)时只能输出 ''call', 'class', 'delattr', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'le', 'lt', 'module', 'name', 'ne', 'new', 'qualname', 'reduce', 'reduce_ex', 'repr', 'self', 'setattr', 'sizeof', 'str', 'subclasshook', 'text_signature' 都没有call等属性,这些特殊性智能通过官方文档查看吗?不可以使用help或dir的方式查看吗? 初学python,使用的版本为python3.4.3,热心期盼解答。

getattr并没有限定属性名啊,你的这一句代码:c.type = 'truck'已经定义了type属性了,你将这一句代码注释掉,就会报出你事先定义的异常了。。。


  • 1

Reply