子类变量与超类变量同名

2024-02-13

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

class A:
    def __init__(self, name):
        self.name = name

class B(A):
    def __init__(self, name):
        A.__init__(self, name)
        self.name = name + "yes"

有什么办法可以self.nameB 类中的名称独立于 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,这通常是您想要的。如果您希望它们分开,但具有相同的变量名称,请使用下划线

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

子类变量与超类变量同名 的相关文章

随机推荐