如何删除__init__中出现的变量?

时间:2015-02-07 16:16:32

标签: python oop initialization

如果我有这个:

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__中显示的变量名称?

2 个答案:

答案 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对象,请不要尝试将其变为其他内容。