ことを「コピーコンストラクタ」のようなものはありません - あなたはpythonで=
をオーバーロードすることはできません。しかし、あなたは簡単にクラスBの関数を定義することができます。
def fromA(self,someA):
self.x = someA.x
self.y = someA.y
今ex1.fromA(exA)
はあなたがやりたいだろう。また、A
でこれを定義することもできます。あなたがA
またはB
でそれを定義しない場合は、むしろあなたの場合に初期化を使用することができます:
def __init__(self,p,q,someA):
self.fromA(someA).
self.p = p
self.q = q
EDITあなたは親クラスのすべての属性をコピーするために何かをしたい場合は、親クラスのプットで:
def fromA(self,someA):
for att in someA.__dict__:
self.__dict__[att] = someA.__dict__[att]
あなたがinit
の外のものを追加した場合、この属性は、現在のオブジェクト内に存在していることを確認してみてくださいに包まれる必要があります。
感謝を。私はこのようにすることを考えましたが、このオプションは非常に厄介です。基本クラスを変更するたびにこの関数を更新し続ける必要があります。私がこれを行うと思ったもう1つの方法は、__dict__属性を比較して変更することでしたが、よりエレガントなものが可能な場合は、それほど遠くに行きたくありません。 –
私は参照してください。関数のクラスの属性のリストを使用し、それらのすべてをループするオプションがあります。これは機能を変更する必要はありません。これはまた、親に関数が必要であることを意味します。あなたは私に例を示すか、私が話していることを知っていますか? – kabanus
ありがとう、はい私はループビットを行う方法を知っています。それは私が '__dict__ 'を通して属性を変更することによって意味されました。 –