实例.\uu dict\uuux class.\uu dict__

2024-06-02 09:12:57 发布

您现在位置:Python中文网/ 问答频道 /正文

代码优先:

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?

Tags: 代码selfobjectfoodefnotbardict
2条回答

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

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

这将创建一个类对象,绑定到名称A。该对象包含两个属性,foo和{},每个属性都绑定到方法对象。在

^{2}$

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

在Python中,也可以随时(几乎)在任何对象上创建属性。它只需要some_object.some_attribute = some_value。在此之前,该属性不存在。因此,在实际调用a.foo()a.bar()时,foo和{}属性不存在于a中(你的程序可能也可能不会添加任何其他属性),这就是为什么{}在您调用它的时候是空的。如果您希望每个对象上都存在foobar的“默认”值,则需要在__init__方法中设置这些值。在

a.__dict__为空,因为实例上没有初始化任何属性,因为没有定义__init__()。同时,类是一个对象,它初始化了一些属性。在

>>> A
<class '__main__.A'>

相关问题 更多 >