我需要一点解释。对一个对象的操作会对其他对象进行更改,例如:
aa = Classifier("aa")
bb = Classifier("bb")
aa.print_table()
{1: 6, 2: 26}
bb.print_table()
{1: 6, 2: 26}
aa.addValue(3)
bb.print_table()
{1: 6, 2: 26, 3: 1}
以下是我班级的一部分:
class Classifier:
classTable = {1:0}
default = 0
classTable_size = 0
def __init__(self, q):
a = 1
self.name = q
def addValue(self, i_index):
self.classTable.setdefault(i_index, self.default)
self.classTable[i_index] += 1
self.classTable_size += 1
def print_table(self):
print(self.classTable)
如果我在类的顶部定义变量(在这种情况下在构造函数之前),它将使它成为"静态"或者我班上有错误?我正在考虑以这种方式定义变量,使它们只能从自己的对象中获得。
我是python的新手。
答案 0 :(得分:0)
示例:
class A:
data = {}
def __str__(self):
return str(self.data)
class B:
data = {}
def __init__(self):
self.data = {'B': 5}
def __str__(self):
return str(self.data)
在班级A
中,一个实例本身并不拥有data
;它是静态的'并且可以使用self.data
以及A.data
访问(这是python在对象中查找变量的方式:如果self.data
不存在,python将查找A.data
) ;两者都引用相同的字典。对self.data
(或A.data
)的更改将影响所有实例:
a = A()
a.data.update({'A': 3})
print(a) # -> {'A': 3}
aa = A()
print(aa) # -> {'A': 3}
除非您为实例添加新的data
成员;这个只属于实例:
aa.data = {} # data references now this empty dict and not A.data anymore
print(a) # -> {}
print(aa) # -> {'A': 3}
在class B
中,每个实例都会在'构造函数中获得自己的新dict。
__init__
- 即使有静态的' data
成员。一个实例中的更改不会影响其他实例。 self.data
现在是与B.data
不同的对象。
通常,拥有一个具有相同名称的类变量(B.data
)和一个实例变量(self.data
)是个坏主意...
也许this值得一读。并且有关于python的更多信息......