名称重整在大多数情况下都有效,但是当子类的名称与超类的名称相同时,则无效。例如,如果不同模块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
答案 0 :(得分:1)
模块名称被设计为名称空间的一部分,我认为“全名修改”的最简单答案就是添加模块名称。
答案 1 :(得分:0)
如果您不能在子类中拿出一个与超类不同的有意义的名称,那应该告诉您以下两件事之一:
设计中有些地方不对。您的子类是否真的与超类非常相似,因此您必须将其命名为相同的名称(或:子类中的属性确实与超类中的某些东西相似)吗?如果是这样,创建子类(或仅将其添加到子类中)是否有意义?
您的名字没有意义。给事物起更多描述性的名称,这个问题就会消失。