次のようなパターンがあります。
class Foobar(object): # instances of this class will be referenced by others
def __init__(self, value):
self.value = value
class Foo(object):
def __init__(self, value, foobar)
self.value = value
if isinstance(foobar, Foobar):
self.foobar = foobar
else:
self.foobar = Foobar(foobar)
class Bar(object):
def __init__(self, value, foobar)
self.value = value
if isinstance(foobar, Foobar):
self.foobar = foobar
else:
self.foobar = Foobar(foobar)
これによりFoo
、 とBar
は新しい値 ( を作成するためFoobar
) または の既存のインスタンスのいずれかを引数Foobar
として受け取ることができます。foobar
この冗長なコードを取り除きたい:
# ...
if isinstance(foobar, Foobar):
self.foobar = foobar
else:
self.foobar = Foobar(foobar)
私は次のことを検討しましたが、 の無限再帰のために機能しませんFoobar.__new__()
:
class Foobar(object):
def __new__(cls, value):
if isinstance(value, cls):
return value
else:
return Foobar(value)
def __init__(self, value):
self.value = value
class Foo(object):
def __init__(self, value, foobar)
self.value = value
self.foobar = Foobar(foobar)
class Bar(object):
def __init__(self, value, foobar)
self.value = value
self.foobar = Foobar(foobar)
に渡される値に応じて、クラスが新しいインスタンスを作成したり__init__
、既存のインスタンスを使用できるようにする最善の方法は何ですか?