是否有可能发生不覆盖?例如:
class A:
def __init__(self, name):
self.name = name
class B(A):
def __init__(self, name):
A.__init__(self, name)
self.name = name + "yes"
B 类有什么办法self.name
可以独立于 A 类,还是必须使用不同的名称?
使用两个下划线为名称添加前缀会导致名称混乱,这似乎是您想要的。例如
class A:
def __init__(self, name):
self.__name = name
def print_name(self):
print self.__name
class B(A):
def __init__(self, name):
A.__init__(self, name)
self.__name = name + "yes"
def print_name(self):
print self.__name
def print_super_name(self):
print self._A__name #class name mangled into attribute
在类定义中,您可以__name
正常处理(如在print_name
方法中)。在子类中,以及类定义之外的任何其他地方,类的名称与前面的下划线混合到属性名称中。
b = B('so')
b._A__name = 'something'
b._B__name = 'something else'
在您发布的代码中,子类属性将覆盖超类的name
,这通常是您想要的。如果您希望它们分开,但具有相同的变量名,请使用下划线