Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 未声明类属性_Python_Class_Oop - Fatal编程技术网

Python 未声明类属性

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

当一些类属性没有声明时,这段代码如何工作

类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')
如果确实需要限制给定类的成员可用的属性数量,请在类定义中使用
\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等子类)。