gpt4 book ai didi

python - instance.__dict__ & class.__dict__

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:43 24 4
gpt4 key购买 nike

代码先行:

class A(object):
def foo(self):
self.foo = 'foo'
def bar(self):
self.bar = 'bar'

cls_dict = dict(A.__dict__) #not empty

a = A()
a_dict = dict(a.__dict__) #empty, why?

最佳答案

在 Python 中,一切都是包含属性的对象。这包括类本身。整个面向对象的东西,其中包含定义方法的类和可以使用每个实例的不同数据执行这些方法的实例,这只是一个用于在一系列对象中查找属性的协议(protocol)。

class A(object):
def foo(self):
self.foo = 'foo'
def bar(self):
self.bar = 'bar'

这将创建一个类对象,绑定(bind)到名称 A。该对象包含两个属性,foobar,每个都绑定(bind)到方法对象。

a = A()

这将创建一个绑定(bind)到名称 a 的对象,它是 A 的一个实例。它根本不包含任何属性。但事实上,它是 A 的一个实例,这意味着当您请求 a.foo 时,“查找协议(protocol)”是首先在 a< 上查找属性,如果失败则在 A 上寻找属性。这就是 A 的所有实例如何访问同一组方法。

同样,在 Python 中,您可以随时在(几乎)任何对象上创建属性。它只需要 some_object.some_attribute = some_value。在您这样做之前,该属性不存在。因此,在实际调用 a.foo()a.bar() 时,那些 foobar 属性会执行a 中不存在(您的程序有一天可能会或可能不会添加到该对象的任何其他属性),这就是为什么 a.__dict__ 在以下位置为空的原因你叫它。如果您希望每个对象都存在 foobar 的“默认”值,您需要通过在 __init__ 中设置这些值来说明这一点方法。

关于python - instance.__dict__ & class.__dict__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7720611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com