我想知道这两个类中的 Foo.var= user input 和 self.var= userinput 之间有什么区别。
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
,最后在g
的构造函数中设置为20
;另一方面,实例变量影子类变量;所以,如果你这样做
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
's)属性var
不再存在,因此f.var
再次引用类属性var
(因此f.var==g.var==foo.var==20
)。
长话短说:通常您会想要使用self.var
(即实例成员); classname.var
仅用于在给定类的所有实例之间共享内容。
关于python - <类名>之间的区别。 python 类中的 <var name> 和 self.<var name>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890651/