python:当子类具有相同的名称时,如何避免名称冲突?

2024-05-13 08:13:56 发布

您现在位置:Python中文网/ 问答频道 /正文

名称损坏在大多数情况下都是有效的,但当子类的名称与超级类的名称相同时就不起作用了;例如,如果不同模块中的两个类m2.A扩展了m1.A,那么m2.A.foo将隐藏m1.A.foo,因为它们都变成了_A__foo;是否有一个选项可以启用“更完整”的名称损坏,即使用唯一的类标识符损坏类字段

# m1.py
class C:
    def __foo(self):
        print('C1')

    def bar(self):
        self.__foo()

# main.py
from m1 import C as C1

class C(C1):
    # i mangle this for internal use within this class, not expecting it to
    # break a super class method; so i cant safely use a name even if it is
    # mangled; sad, is there a way to mangle with a guid across all classes?
    def __foo(self):
        print('CM')

C().bar()   # CM not C1

Tags: pyself名称foousedefnotbar
2条回答

如果您不能在子类中找到一个与超类不同的有意义的名称,那么应该告诉您以下两点之一:

  • 这个设计有点不太对劲。您的子类是否真的与超类如此相似以至于您必须将其命名为相同的(或者:子类中的属性是否真的与超类中的某个东西如此相似)?如果是这样的话,那么创建一个子类(或者只在子类中添加它)有意义吗

  • 你的名字没有意义。给事物起个更具描述性的名字,这个问题就会消失

模块名被设计成名称空间的一部分,我认为“全名混乱”最简单的答案就是添加模块名

相关问题 更多 >