gpt4 book ai didi

python - 与父类(super class)同名的子类变量

转载 作者:太空狗 更新时间:2023-10-29 22:23:20 46 4
gpt4 key购买 nike

是否有可能不发生覆盖?例如:

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'

在您发布的代码中,子类属性将覆盖父类(super class)的 name,这通常是您想要的。如果您希望它们分开,但具有相同的变量名,请使用下划线

关于python - 与父类(super class)同名的子类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11927055/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com