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

How remove a variable that appears in __init__?

如果我有这个:

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

你不能随心所欲,如果你从 Two.__init__ 调用 One.__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 中的其余功能,这是您可能不想做的事情。 class 中的其余方法可能依赖于已设置的某些属性。

在 OOP 术语中,如果 Two 不是一种特殊类型的 One 对象,则不要继承自 One。如果Two 一种One对象,不要试图把它变成别的东西。

传递给 __init__ 的参数名称与 可能发生的实例变量名称之间根本没有 关系 由该参数初始化。这只是约定俗成的问题,两者的名称相同。

下面的两个代码片段将执行完全相同的操作:

class One(object):
    def __init__(self, name):
        self.name = name

class One(object):
    def __init__(self, xyz):
        self.name = xyz

关于重命名一个实例变量,你可能会做类似的事情,但这是(非常)糟糕的风格并且有(很大)机会破坏(基础) class and/or 在任何需要 proper 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 !!!