2024-06-02 09:12:57 发布
网友
代码优先:
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中,一切都是一个包含属性的对象。这包括类本身。整个面向对象的东西,包括定义方法和实例的类,这些方法和实例可以用每个实例的不同数据执行这些方法,这只是在一系列对象中查找属性的协议。在
class A(object): def foo(self): self.foo = 'foo' def bar(self): self.bar = 'bar'
这将创建一个类对象,绑定到名称A。该对象包含两个属性,foo和{},每个属性都绑定到方法对象。在
A
foo
这将创建一个绑定到名称a的对象,它是A的实例。它还没有包含任何属性。但是,它是A的实例意味着当您请求a.foo时的“查找协议”是首先在a上查找属性,如果失败,则在A上查找属性。这就是A的所有实例如何访问同一组方法。在
a
a.foo
在Python中,也可以随时(几乎)在任何对象上创建属性。它只需要some_object.some_attribute = some_value。在此之前,该属性不存在。因此,在实际调用a.foo()或a.bar()时,foo和{}属性不存在于a中(你的程序可能也可能不会添加任何其他属性),这就是为什么{}在您调用它的时候是空的。如果您希望每个对象上都存在foo和bar的“默认”值,则需要在__init__方法中设置这些值。在
some_object.some_attribute = some_value
a.foo()
a.bar()
bar
__init__
a.__dict__为空,因为实例上没有初始化任何属性,因为没有定义__init__()。同时,类是一个对象,它初始化了一些属性。在
a.__dict__
__init__()
>>> A <class '__main__.A'>
在Python中,一切都是一个包含属性的对象。这包括类本身。整个面向对象的东西,包括定义方法和实例的类,这些方法和实例可以用每个实例的不同数据执行这些方法,这只是在一系列对象中查找属性的协议。在
这将创建一个类对象,绑定到名称},每个属性都绑定到方法对象。在
^{2}$A
。该对象包含两个属性,foo
和{这将创建一个绑定到名称
a
的对象,它是A
的实例。它还没有包含任何属性。但是,它是A
的实例意味着当您请求a.foo
时的“查找协议”是首先在a
上查找属性,如果失败,则在A
上查找属性。这就是A
的所有实例如何访问同一组方法。在在Python中,也可以随时(几乎)在任何对象上创建属性。它只需要}属性不存在于}在您调用它的时候是空的。如果您希望每个对象上都存在
some_object.some_attribute = some_value
。在此之前,该属性不存在。因此,在实际调用a.foo()
或a.bar()
时,foo
和{a
中(你的程序可能也可能不会添加任何其他属性),这就是为什么{foo
和bar
的“默认”值,则需要在__init__
方法中设置这些值。在a.__dict__
为空,因为实例上没有初始化任何属性,因为没有定义__init__()
。同时,类是一个对象,它初始化了一些属性。在相关问题 更多 >
编程相关推荐