如何删除出现在 __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 !!!
如果我有这个:
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 !!!