当前位置: 首页 > 面试题库 >

Python属性如何工作?

海雪松
2023-03-14
问题内容

我已经成功地使用了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对象,因此类实例化必须在做魔术,但是那是什么魔术呢?


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 第一次使用Java开发,第一次使用Android开发,因此这是一个新手问题。 我目前有以下代码: 简短问题: 什么是 的.class 属性来完成,f.ex. 在’ C = NewTourny 的.class ‘? 为什么我不能将c转换为Tourny(所有这些类的父类)? 长问题: 目前,这可以处理整个应用程序中的所有按钮导航,并且工作正常。但是,如您所见,当我将c强制转换为Class时

  • 我想让导航栏贴在视区的顶部,一旦用户滚动页面,但它不起作用,我不知道为什么。如果你能帮忙,这里是我的HTML和CSS代码: null null

  • 我们知道,在maven项目中,我们可以设置以下属性来为插件maven-compiler-plugin指定java版本: 问题是,如果要使用上述属性,我们是否应该在本地安装jdk8呢?

  • 当我将inplace属性的值更改为False时,索引"a"中的元素未删除,但当我更改inplace=True value at index"a"时删除。我不明白它是如何工作的。

  • 问题内容: 如果我遵循此处描述的JavaFX属性定义,那么我尝试执行的操作将正常工作。现在,我想使用Java Beans属性适配器从Java Beans对象定义属性。由于没有文档,我无法弄清楚它是如何工作的。 假设我有一个简单的POJO类: 和一个PersonProperty: 最后是一个测试: 我希望看到: 而是什么也没有出现。 如果我在personTest的末尾添加 问题答案: 我认为这里的问

  • 问题内容: 实际如何运作?是否可以对未指定的元素起作用?它是否偏向于具有指定元素的元素(即使它们位于顶部)? 这样的数字是否必须为负数? 或不?所有正数(以递增值表示)会以最后一个在顶部,中间在中间,第一个在底部为结尾吗? 问题答案: 允许使用负整数和正整数。 必须在元素上设置位置。 不过,在深入了解这些细节之前,让我从头开始进行解释。 每个网页都由所谓的堆栈上下文组成。从字面上看,您可以将它们视