Python 未声明类属性
当一些类属性没有声明时,这段代码如何工作 类A仅声明了一个属性aa 但可以将其他属性“分配”给对象A,这些属性存储在列表L中,以后可以引用Python 未声明类属性,python,class,oop,Python,Class,Oop,当一些类属性没有声明时,这段代码如何工作 类A仅声明了一个属性aa 但可以将其他属性“分配”给对象A,这些属性存储在列表L中,以后可以引用 class A(object): aa = '' L = [] One = A() L.append(One) One.Type = 'One_Type' One.Name = 'One' One.Top = 200 One.Left = 50 Two = A() L.append(Two) Two.Type = 'Two_Type' T
class A(object):
aa = ''
L = []
One = A()
L.append(One)
One.Type = 'One_Type'
One.Name = 'One'
One.Top = 200
One.Left = 50
Two = A()
L.append(Two)
Two.Type = 'Two_Type'
Two.Name = 'Two'
Two.Text = 'Hello'
One.XXX = 'XXX'
for i in range(len(L)):
for key, value in L[i].__dict__.items():
print(L[i].Name, key, value)#, L[i].Type)
print
print
这就是结果:
('One', 'Top', 200)
('One', 'XXX', 'XXX')
('One', 'Type', 'One_Type')
('One', 'Name', 'One')
('One', 'Left', 50)
('Two', 'Text', 'Hello')
('Two', 'Type', 'Two_Type')
('Two', 'Name', 'Two')
如果确实需要限制给定类的成员可用的属性数量,请在类定义中使用\uuuu slots\uuu
。在Python交互式shell中考虑这个例子:
>>> class A(object):
... __slots__ = ('some', 'other')
... def __init__(self):
... self.some = 1
... self.other = 2
>>> a = A()
>>> a.some
1
>>> a.some = 2
>>> a.some
2
>>> a.third = 3
Traceback (most recent call last):
File "<bpython-input-13>", line 2, in <module>
a.third = 3
AttributeError: 'A' object has no attribute 'third'
>>A类(对象):
... __插槽uu=('some','other')
... 定义初始化(自):
... self.some=1
... self.other=2
>>>a=a()
>>>a.一些
1.
>>>a.一些=2
>>>a.一些
2.
>>>三分之一=3
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
a、 第三个=3
AttributeError:“A”对象没有属性“third”
但实际上,pythonish的对象属性方法通常是完全动态的:如果某个特定实例需要特定的唯一属性或方法,那么分配它并没有错。Python是动态的,您可以在运行时将任何喜欢的属性分配给自定义类(除非您使用的是例如
\uuuu插槽
,否则必须将命名为tuple等子类)。