名称损坏在大多数情况下都是有效的,但当子类的名称与超级类的名称相同时就不起作用了;例如,如果不同模块中的两个类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
如果您不能在子类中找到一个与超类不同的有意义的名称,那么应该告诉您以下两点之一:
这个设计有点不太对劲。您的子类是否真的与超类如此相似以至于您必须将其命名为相同的(或者:子类中的属性是否真的与超类中的某个东西如此相似)?如果是这样的话,那么创建一个子类(或者只在子类中添加它)有意义吗
你的名字没有意义。给事物起个更具描述性的名字,这个问题就会消失
模块名被设计成名称空间的一部分,我认为“全名混乱”最简单的答案就是添加模块名
相关问题 更多 >
编程相关推荐