カスタム__new__を使用してクラスをサブクラス化するPython

Markus Meskanen

__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__メソッドをにオーバーライドするだけですか?

Martijn Pieters

元のプロジェクトは、サブクラスで__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]

編集
0

コメントを追加

0

関連記事

分類Dev

Json.Netを使用してNameValueCollectionのカスタムサブクラスをシリアル化する

分類Dev

カスタムtableviewcellを使用してUITableViewControllerのサブクラスをプログラムで初期化します

分類Dev

カスタムコンストラクターを使用してオブジェクトをクラス属性としてインスタンス化する(C ++)

分類Dev

XamarinはカスタムUINavigationBarを使用してUINavigationControllerをサブクラス化しました

分類Dev

super()を使用してPythonでサブクラスパラメータを初期化する方法

分類Dev

RxSwiftを使用したカスタムUIControlサブクラス

分類Dev

サブクラスを使用したカスタムUITabBarController

分類Dev

__new__メソッドを定義した列挙型をサブクラス化できますか?

分類Dev

カスタムクラスパスを使用してGradleタスクでJavaクラスを実行する

分類Dev

カスタムListViewItem(サブクラスListViewItem)を作成します

分類Dev

スーパークラスを使用してサブクラスオブジェクトJavaを初期化する

分類Dev

タプルのサブクラスを作成するときに__new__を呼び出す

分類Dev

笑顔ライブラリのCLARANSメソッドを使用して、カスタム距離行列と私のデータをクラスタ化する方法

分類Dev

awakeFromNibをサブクラス化して、スーパークラスのカスタムinit / setupメソッドを呼び出しますか?

分類Dev

argparse.Actionをサブクラス化してカスタムアクションを追加するにはどうすればよいですか?

分類Dev

Gsonを使用して、サブJSONオブジェクト情報をカスタムクラスを作成せずに取得する方法はありますか?

分類Dev

子の異なる__new__署名を使用して__new__で子をインスタンス化します

分類Dev

MainActivityのListViewオブジェクトを使用してカスタムアクティビティクラスをインスタンス化します

分類Dev

Pythonで同じパラメータを使用してXのサブメソッドでクラスXをインスタンス化する方法は?

分類Dev

QAbstractListModelからカスタムQObjectサブクラスを返し、それをListViewで使用する

分類Dev

NativeScript で JS を使用してカスタム クラスを作成し、ネイティブ Android で使用する

分類Dev

メタクラスを使用する場合の__new__への疑似引数

分類Dev

カスタムインデックスを使用してdata.table(data.frame)をフラット化する

分類Dev

Puppetを使用して別のカスタムクラスを要求する方法

分類Dev

クラスを使用してReactTypeScriptでカスタムURLを生成する方法

分類Dev

カスタムImageViewクラスを使用して、NullPointerExceptionを取得する

分類Dev

メタクラスの__new__はエラーをスローします

分類Dev

行/列インデックスを使用してラスターをサブセット化する

分類Dev

Pythonで適切な型ヒントを使用してシーケンスをサブクラス化する

Related 関連記事

  1. 1

    Json.Netを使用してNameValueCollectionのカスタムサブクラスをシリアル化する

  2. 2

    カスタムtableviewcellを使用してUITableViewControllerのサブクラスをプログラムで初期化します

  3. 3

    カスタムコンストラクターを使用してオブジェクトをクラス属性としてインスタンス化する(C ++)

  4. 4

    XamarinはカスタムUINavigationBarを使用してUINavigationControllerをサブクラス化しました

  5. 5

    super()を使用してPythonでサブクラスパラメータを初期化する方法

  6. 6

    RxSwiftを使用したカスタムUIControlサブクラス

  7. 7

    サブクラスを使用したカスタムUITabBarController

  8. 8

    __new__メソッドを定義した列挙型をサブクラス化できますか?

  9. 9

    カスタムクラスパスを使用してGradleタスクでJavaクラスを実行する

  10. 10

    カスタムListViewItem(サブクラスListViewItem)を作成します

  11. 11

    スーパークラスを使用してサブクラスオブジェクトJavaを初期化する

  12. 12

    タプルのサブクラスを作成するときに__new__を呼び出す

  13. 13

    笑顔ライブラリのCLARANSメソッドを使用して、カスタム距離行列と私のデータをクラスタ化する方法

  14. 14

    awakeFromNibをサブクラス化して、スーパークラスのカスタムinit / setupメソッドを呼び出しますか?

  15. 15

    argparse.Actionをサブクラス化してカスタムアクションを追加するにはどうすればよいですか?

  16. 16

    Gsonを使用して、サブJSONオブジェクト情報をカスタムクラスを作成せずに取得する方法はありますか?

  17. 17

    子の異なる__new__署名を使用して__new__で子をインスタンス化します

  18. 18

    MainActivityのListViewオブジェクトを使用してカスタムアクティビティクラスをインスタンス化します

  19. 19

    Pythonで同じパラメータを使用してXのサブメソッドでクラスXをインスタンス化する方法は?

  20. 20

    QAbstractListModelからカスタムQObjectサブクラスを返し、それをListViewで使用する

  21. 21

    NativeScript で JS を使用してカスタム クラスを作成し、ネイティブ Android で使用する

  22. 22

    メタクラスを使用する場合の__new__への疑似引数

  23. 23

    カスタムインデックスを使用してdata.table(data.frame)をフラット化する

  24. 24

    Puppetを使用して別のカスタムクラスを要求する方法

  25. 25

    クラスを使用してReactTypeScriptでカスタムURLを生成する方法

  26. 26

    カスタムImageViewクラスを使用して、NullPointerExceptionを取得する

  27. 27

    メタクラスの__new__はエラーをスローします

  28. 28

    行/列インデックスを使用してラスターをサブセット化する

  29. 29

    Pythonで適切な型ヒントを使用してシーケンスをサブクラス化する

ホットタグ

アーカイブ