Discuss / Python / 求解

求解

Topic source

Champhy_Who

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

针对可嘻可惜5250的回答

其中有一处不懂

对实例c1进行“.”运算,增加一个“status”属性,即调用getattr(self, status)

这句有些困惑 1.为何.运算一定执行的是getattr,如果这个class更加复杂?

2.instance.method() 实利调用方法,我能理解 但是instance.变量,不能理解

楼主本人可能不在,希望其他同学解答一下

实例对象.属性名,这是在访问该实例对象中该属性的值。但是当该实例对象中不存在要访问的属性值的时候,就会自动调用getattr()这个方法。 例如,对于Chain().status来说,Chain()是在定义一个Chain这个类的实例对象,只不过这个实例对象没有赋值给某一个变量。然后访问这个实例对象中的status这个属性。然而该实例对象中不存在status这个属性,所以调用该实例对象的getattr方法,而getattr包含两个参数,self和attr,self省略不管,attr就是要访问的(在实例对象中不存在的)属性名,也就是会调用getattr(self, 'status')。这样就将status拼接到self.path后面了。

Champhy_Who

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

那么也就是说,前提是存在getattr这个定制类 否则,instance.属性名,不能callable的。 这么理解没问题把?


  • 1

Reply