Python属性如何工作?

发布于 2021-01-29 15:08:37

我已经成功地使用了Python属性,但看不到它们如何工作。如果我取消引用类之外的属性,我只会得到一个类型的对象property

@property
def hello(): return "Hello, world!"

hello  # <property object at 0x9870a8>

但是,如果我将一个属性放在一个类中,则行为会大不相同:

class Foo(object):
   @property
   def hello(self): return "Hello, world!"

Foo().hello # 'Hello, world!'

我注意到未绑定Foo.hello仍然是property对象,因此类实例化必须在做魔术,但是那是什么魔术呢?

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    正如其他人指出的那样,它们使用称为描述符的语言功能。

    当您通过类访问实际属性对象时,返回该属性对象的原因在于该属性Foo.hello如何实现__get__(self, instance, owner)特殊方法:

    • 如果在 实例 上访问了描述符,则该实例作为适当的参数传递,并且owner是该实例的
    • 当通过类访问它时,instance则为None且仅owner通过。该property对象认识到这一点并返回self

    除了“描述符”方法外,另请参阅《语言指南》中有关实现描述符调用描述符的文档。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看