2 つのクラスのクローン メソッドで同じコードを繰り返さないようにしています。一方は他方から継承しています。私の現在のアプローチは、両方のクラスに共通するコードを基本クラスの (非静的) clone メソッドに入れ、それを拡張クラスから呼び出すことです。これを行うために、拡張クラスのコンストラクターを基本クラスに渡して、そこで呼び出すことができるようにしています。これは、私が現在行っていることの簡単な例です。
class S(object):
"""Base class"""
def __init__(self):
self.a = 0
def clone(self, constructor=None):
if constructor is None:
constructor = self.__init__
cloned = constructor()
# Expecting: cloned.a = 1, cloned.b = 7
assert cloned is not None # raises AssertionError
cloned.a = self.a # Set a to 2
return cloned
class C(S):
"""Child class, extending Base"""
def __init__(self):
self.a = 1
self.b = 7
def clone(self):
cloned = super(C, self).clone(self.__init__)
# Expecting: cloned.a = 2, cloned.b = 7
cloned.b = self.b # Set b to 8
return cloned
if __name__ == '__main__':
c1 = C()
c1.a = 2
c1.a = 8
c2 = c1.clone()
この時点での私の質問は次のとおりです。
基底クラス
None
のメソッドを呼び出したときに返されるのはなぜですか?clone
またはを使用して、メソッドを使用するためにクラスにバインドする必要があり ます
types.MethodType
か__get__
?より良い方法として何を提案しますか?