关于使用的问题有很多,super()
但似乎没有一个能回答我的问题。
从子类调用super().__init__()
时,超构造函数中的所有方法调用实际上都是从子类中获取的。考虑以下类结构:
class A(object):
def __init__(self):
print("initializing A")
self.a()
def a(self):
print("A.a()")
class B(A):
def __init__(self):
super().__init__()
# add stuff for B
self.bnum=3 # required by B.a()
def a(self):
print("B.a(), bnum=%i"%self.bnum)
b=B()
失败了
initializing A
Traceback (most recent call last):
File "classmagic.py", line 17, in
b=B()
File "classmagic.py", line 11, in __init__
super().__init__()
File "classmagic.py", line 5, in __init__
self.a()
File "classmagic.py", line 15, in a
print("B.a(), bnum=%i"%self.bnum)
AttributeError: 'B' object has no attribute 'bnum'
这里我调用了超级构造函数B()
来初始化一些基本结构(其中一些作为自己的函数执行a()
)。但是,如果我也重写该函数,则在调用' 的构造函数a()
时使用此实现,该构造函数失败,因为对它一无所知并且可能使用不同的内部变量。A
A
B
这可能是直观的,也可能不是直观的,但是当我希望所有方法都A
只能访问那里实现的功能时,我该怎么办?