Python 变量访问
Python Variable Access
class A:
def __init__(self):
self.i = 0
def demo(self):
self.a=1
class B(A):
def __init__(self, j = 0):
super().__init__()
self.j = j
print(self.i)
self.demo()
def demo(self):
print(self.a)
def main():
b = B()
print(b.i)
print(b.j)
main()
为什么我无法访问 self.a inside class b
用 self 给变量加上前缀。将使它成为一个实例变量
谢谢
这是因为实例变量b
没有在A
__init__
内初始化
因为您覆盖了 B class
上的 demo
方法。
如果你想访问 self.a
将它添加到 A
class 的 __init__
方法或像这样调用父 demo
方法:
def demo(self):
super().demo()
print(self.a)
当您为两个 类 都包含一个 demo
方法时,最 recently-defined 一个会掩盖其他。由于您在定义 A
之后但在调用 A
中的任何方法之前定义了 B
,因此 demo
将尝试访问从未定义的变量。您应该在 A
中调用 demo
(可能在 __init__
中),或者将 B
中的 demo
的名称更改为唯一的名称,这样您就可以访问这两种方法(可能是最好的方法,因为它们做不同的事情而您想同时使用这两种方法)。
因为class A.demo()没有被执行:
class答:
def init(self):
self.i = 0
定义演示(自我):
self.a=1
class B(A):
def __init__(self, j = 0):
super().__init__()
self.j = j
print(self.i)
super().demo()
self.demo()
def demo(self):
print(self.a)
def main():
b = B()
print(b.i)
print(b.j)
main()
class A:
def __init__(self):
self.i = 0
def demo(self):
self.a=1
class B(A):
def __init__(self, j = 0):
super().__init__()
self.j = j
print(self.i)
self.demo()
def demo(self):
print(self.a)
def main():
b = B()
print(b.i)
print(b.j)
main()
为什么我无法访问 self.a inside class b 用 self 给变量加上前缀。将使它成为一个实例变量 谢谢
这是因为实例变量b
没有在A
__init__
内初始化
因为您覆盖了 B class
上的 demo
方法。
如果你想访问 self.a
将它添加到 A
class 的 __init__
方法或像这样调用父 demo
方法:
def demo(self):
super().demo()
print(self.a)
当您为两个 类 都包含一个 demo
方法时,最 recently-defined 一个会掩盖其他。由于您在定义 A
之后但在调用 A
中的任何方法之前定义了 B
,因此 demo
将尝试访问从未定义的变量。您应该在 A
中调用 demo
(可能在 __init__
中),或者将 B
中的 demo
的名称更改为唯一的名称,这样您就可以访问这两种方法(可能是最好的方法,因为它们做不同的事情而您想同时使用这两种方法)。
因为class A.demo()没有被执行:
class答:
def init(self):
self.i = 0
定义演示(自我):
self.a=1
class B(A):
def __init__(self, j = 0):
super().__init__()
self.j = j
print(self.i)
super().demo()
self.demo()
def demo(self):
print(self.a)
def main():
b = B()
print(b.i)
print(b.j)
main()