__init__
(object
's以外の__init__
)宣言されていないクラス(私が作成したものではなく、サードパーティのライブラリから)があり、これは__new__
次のとおりです。
def __new__(cls, uid):
self = super().__new__(cls, uid)
self._info = get_info_from_uid(uid)
return self
なぜ__init__
ここで使わなかったのかわかりませんが、使わなかったのです。
ここで、これをサブクラス化して、追加の属性を付けたいと思います。クラスのソースコード(ドキュメントのみ)を確認する前は、他のクラスと同じ__init__
ように使用していると思っていたので、次のようにしました。
class MyClass(TheirClass):
def __init__(self, uid, my_stuff=()):
super().__init__(uid)
self.my_stuff = my_stuff
どうやらこれはobject.__init__()
パラメータを取らないことからTypeErrorを引き起こしました。そのようなクラスをどのようにサブクラス化する必要があり__new__
ますか?__new__
メソッドをにオーバーライドするだけですか?
元のプロジェクトは、サブクラスで__new__
両方__init__
と__new__
一緒に使用することに固執しているため、実際には非常に__new__
扱いにくい場合があるため、サブクラスでも使用する必要があります。
class MyClass(TheirClass):
def __new__(cls, uid, my_stuff=()):
self = super().__new__(cls, uid)
self.my_stuff = my_stuff
return self
おそらく、元の作者は、型は不変として扱われるべきだと感じていました。
あなたが__init__
主張するならば、あなたはまだ使うことができます、しかしあなたはあなたが今取る余分な議論を説明するためにとにかく__new__
メソッドを指定しなければならないでしょう:__init__
class MyClass(TheirClass):
def __new__(cls, uid, *args):
# ignore the extra arguments
return super().__new__(cls, uid)
def __init__(self, uid, my_stuff=()):
self.my_stuff = my_stuff
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加