我们的人民。 我有一个变量(至少一个名称),但当我尝试以不同的方式访问时,它的值是不同的。这是密码。你知道吗
class Sabirac(object):
nums=[]
def __init__(self):
self.nums=[5,4]
for i in range (1,11):
self.add(randint(1, 100))
@classmethod
def add(self,num):
self.nums.append(num)
@classmethod
def calc_sum(self):
csum=0
for num in self.nums:
csum=csum+num
return csum
@classmethod
def ispis(self):
return self.nums
这是输出。你知道吗
b=Sabirac()
b.nums
[5, 4]
b.ispis()
[85, 72, 6, 42, 34, 20, 77, 89, 91, 47]
c=Sabirac()
c.ispis()
[85, 72, 6, 42, 34, 20, 77, 89, 91, 47, 36, 61, 81, 41, 60, 42, 67, 56, 40, 99]
c.nums
[5, 4]
所以我创建了Sabirac类,并直接访问变量nums,并有输出
[5, 4]
之后,我通过ispis()方法访问同一个变量。但是它给了我完全不同的价值观
[85, 72, 6, 42, 34, 20, 77, 89, 91, 47]
然后,如果我创建类c=Sabirac()的新实例并调用c.ispis(),我的输出将是:
[85, 72, 6, 42, 34, 20, 77, 89, 91, 47, 36, 61, 81, 41, 60, 42, 67, 56, 40, 99]
请注意,只需将10个值附加到b.ispis()。你知道吗
有人能告诉我这是怎么回事吗??你知道吗
乍一看,我们在类级别有一个
nums
似乎无关紧要:它在
__init__()
中的类实例化时被隐藏。你知道吗因此每个对象都有一个实例变量,其中包含
5
和4
,这是通过b.nums
resp得到的。c.nums
。你知道吗但是所有的方法都在类上操作,因为您使用
@classmethod
。你知道吗因此,
self
应该被cls
替换,因为它真正代表了类。你知道吗它们修改类属性
nums
,所有实例都共享该属性。你知道吗不要让你的方法成为类方法。。。很明显,你缺乏一些关于这些是什么的知识
例如
nums
是一个类变量。不是实例变量。如果希望nums
成为一个对象变量,则必须声明到类的__init__
方法(或其他方法)中。你知道吗例如:
相关问题 更多 >
编程相关推荐