如果未声明某些类属性,此代码如何工作?
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'
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')
答案 0 :(得分:0)
如果确实需要限制给定课程的可用属性数量'成员,在类定义中使用__slots__
。在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'
但实际上,通常对对象属性的pythonish方法是完全动态的:如果特定实例需要特定的唯一属性或方法,则分配它没有错。