如果我有这个:
class One(object):
def __init__(self, name):
self.name = name
我想使用One
但更改名称name
并按other
我认为的解决方案是继承:
class Two(One):
def __init__(self, other):
super(Two, self).__init__(other)
想法是:如何删除或更改__init__
中显示的变量名称?
答案 0 :(得分:3)
传递给__init__
的参数名称和可能最终性被初始化的实例变量的名称之间存在 no 关系论点。这只是一个惯例问题而不是两者都被称为相同。
下面的两个代码片段将完全相同:
class One(object):
def __init__(self, name):
self.name = name
class One(object):
def __init__(self, xyz):
self.name = xyz
关于重命名一个实例变量,你可能会做类似的事情,但这是(非常)糟糕的风格,有很大的机会破坏某些东西(基类和/或任何需要正确的 One
实例的客户端代码:
class Two(One):
def __init__(self, other):
super(Two, self).__init__(other)
self.other = self.name # <- no, seriously,
del self.name # <- don't do that !!!
答案 1 :(得分:2)
如果您从One.__init__
拨打Two.__init__
,则无法执行您想要的操作。
如果您想更改设置的属性,只需不要在此处调用One.__init__()
。改为设置自己的属性:
class One(object):
def __init__(self, name):
self.name = name
class Two(One):
def __init__(self, other):
self.other = other
现在永远不会设置self.name
。这很可能会破坏One
中的其余功能,这可能是您不想做的事情。该类中的其余方法可能依赖于已设置的某些属性。
在OOP术语中,如果Two
不是特殊类型的One
对象,请不要继承One
。如果Two
是一种One
对象,请不要尝试将其变为其他内容。