使用self.variable语法创建变量和创建没有变量的变量有什么区别?
我正在测试它,我仍然可以从一个实例访问它们:
class TestClass(object):
j = 10
def __init__(self):
self.i = 20
if __name__ == '__main__':
testInstance = TestClass()
print testInstance.i
print testInstance.j
Run Code Online (Sandbox Code Playgroud)
但是,如果我交换了self它的位置,则会导致错误.
class TestClass(object):
self.j = 10
def __init__(self):
i = 20
if __name__ == '__main__':
testInstance = TestClass()
print testInstance.i
print testInstance.j
>>NameError: name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)
所以我认为自我在初始化中有一个特殊的作用..但是,我只是不太明白它是什么.
self指的是该类的当前实例.如果在函数体之外声明变量,则表示类本身而不是实例,因此该类的所有实例将共享该属性的相同值.
此外,声明为类的一部分(而不是实例的一部分)的变量可以作为类本身的一部分进行访问:
class Foo(object):
a = 1
one = Foo()
two = Foo()
Foo.a = 3
Run Code Online (Sandbox Code Playgroud)
由于此值是类范围的,因此您不仅可以直接从类中读取它:
print Foo.a # prints 3
Run Code Online (Sandbox Code Playgroud)
但它也会改变该类的每个实例的值:
print one.a # prints 3
print two.a # prints 3
Run Code Online (Sandbox Code Playgroud)
但请注意,只有在不使用实例变量覆盖类变量时才会出现这种情况.例如,如果您创建了以下内容:
class Bar(object)
a = 1
def __init__(self):
self.a = 2
Run Code Online (Sandbox Code Playgroud)
然后做了以下事情:
one = Bar()
two = Bar()
two.a = 3
Run Code Online (Sandbox Code Playgroud)
然后你会得到以下结果:
print Bar.a # prints "1"
print one.a # prints "2"
print two.a # prints "3"
Run Code Online (Sandbox Code Playgroud)
如注释中所述,指定在two.a该实例上创建一个实例本地条目,它会覆盖afrom Bar,因此为什么Bar.a仍然是1但是two.a为3.
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |