之间的区别。 和自我。 在python类
问题描述:
我想知道两个类中的Foo.var = user输入和self.var = userinput之间有什么区别。<class name>之间的区别。 <var name>和自我。 <var name>在python类
class foo():
var=None
def __init__(self,userinput):
foo.var=userinput
class bar():
var=None
def __init__(self,userinput):
self.var=userinput
答
foo
指的类,self
指对象。
类成员是类的属性(因此在该类的所有对象之间共享),而实例成员是特定对象的属性,因此对实例成员的更改仅影响给定对象。
当一个对象进行操作,它的成员是类成员的合并和实例成员。当定义两个同名的成员时,实例成员具有优先权。
因此:
-
bar
设置一个实例变量;这种改变只对当前实例的效果,所以,如果你这样做:b=bar(10) c=bar(20)
你会看到
c.var
为20
和b.var
是10
;这里没什么奇怪的 -
foo
设置一个类变量,这是所有实例共有的;所以,如果你这样做:f=foo(10) g=foo(20)
,你会看到,无论
f.var
和g.var
将20
,因为他们都实际上是指foo.var
,这是最后一组,以20
在g
的构造; -
另一方面,实例变量影子类变量;所以,如果你做
f=foo(10) g=foo(20) f.var=30
你必须
g.var==foo.var==20
,但f.var==30
,因为现在f.var
指实例变量 F。VAR; 但,如果你这样做del f.var
现在实例(
f
的)属性var
不再存在,因此f.var
再次指类属性var
(因此f.var==g.var==foo.var==20
)。
长话短说:通常你需要使用self.var
(即实例成员); classname.var
仅用于在给定类的所有实例之间共享内容。
答
是,
在第一种情况下你设置的foo
所有实例变量,这是因为它是一个class
变量。
在第二种情况下,您只设置foo
该实例的变量。
例如:
class pie():
def __init__(self, j):
pie.var = "pies" + str(j)
print (self.var)
def __str__(self):
return self.var
a = pie(1)
b = pie(2)
print (a)
print (b)
完美,这解释了一切。谢谢 – Belrouk 2013-04-09 04:11:59