这可以按照预期的方式工作:
class d:
def __init__(self,arg):
self.a = arg
def p(self):
print "a= ",self.a
x = d(1)
y = d(2)
x.p()
y.p()
产生
a= 1
a= 2
我尝试在__init__
class d:
def __init__(self,arg):
global a
a = arg
def p(self):
print "a= ",a
x = d(1)
y = d(2)
x.p()
y.p()
屈服,不受欢迎:
a= 2
a= 2
有没有办法在不必使用“自我”的情况下编写它?
答案 0 :(得分:6)
“self”是Python的工作方式。所以答案是:不!如果你想剪头发:你不必使用“自我”。任何其他名称也会。 ;-)
答案 1 :(得分:4)
Python方法只是绑定到类的类或实例的函数。唯一的区别是方法(也称为绑定函数)期望实例对象作为第一个参数。此外,当您从实例调用方法时,它会自动将实例作为第一个参数传递。因此,通过在方法中定义self
,您可以告诉它要使用的命名空间。
这样,当您指定self.a
时,该方法知道您正在修改实例名称空间中的实例变量a
。
Python范围从内到外工作,因此每个函数(或方法)都有自己的命名空间。如果您在方法a
中本地创建变量p
(这些名称很糟糕BTW),则它与self.a
的变量不同。使用代码的示例:
class d:
def __init__(self,arg):
self.a = arg
def p(self):
a = self.a - 99
print "my a= ", a
print "instance a= ",self.a
x = d(1)
y = d(2)
x.p()
y.p()
哪个收益率:
my a= -98
instance a= 1
my a= -97
instance a= 2
最后,您不必调用第一个变量self
。你可以随意调用它,尽管你真的不应该。通常从方法中定义和引用self
,所以如果你完全关心其他人阅读你的代码而不想杀死你,那么坚持惯例!
进一步阅读:
答案 2 :(得分:0)
删除self时,最终只有一个名为a
的变量,不仅会在所有d
个对象中共享,还会在整个执行环境中共享。
因此,你不能仅仅消除自我。