首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与超类变量同名的子类变量

与超类变量同名的子类变量
EN

Stack Overflow用户
提问于 2012-08-13 08:48:06
回答 1查看 5K关注 0票数 7

有没有可能不会发生覆盖?例如:

代码语言:javascript
复制
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类中的A,或者强制使用不同的名称?

EN

Stack Overflow用户

回答已采纳

发布于 2012-08-13 08:58:50

在名称前加上两个下划线会导致名称混乱,这似乎是您想要的结果。例如

代码语言:javascript
复制
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方法中一样)。在子类中,以及类定义之外的任何其他地方,类的名称都被损坏为带有前面下划线的属性名称。

代码语言:javascript
复制
b = B('so')
b._A__name = 'something'
b._B__name = 'something else'

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

票数 10
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11927055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档