インスタンス化されていないクラス内からメソッドを呼び出すことはできますか?

素晴らしい

インスタンス化せずにクラス内にインターフェイスメソッドを実装する方法があるかどうか、またはそれが完全に悪い習慣である場合はさらに多くの方法があるかどうかを尋ねたいと思います。もしそうなら、複雑なインターフェースメソッドを実装する正しい方法は何でしょうか?

これが私のコードのプロトタイプです:

class calculator(abc.ABC):

    @abc.abstractmethod
    def calculate(self):
        "start model"

class subcalculator(calculator):
    def calculate(self):
        return model.attr2 ** 3

    def recalculate(self):
        z = calculate(self)
        return z ** 2

ただし、このレポートcalculate()subcalculator.recalculateインスタンス化されていないため、実行時には定義されません。

モデルのインターフェイスクラスを作成しているだけなので、開始を作成するのは良い考えではないと思います(またはそうですか?)そのような場合はどうすればよいですか?

編集: @chepnerの回答によると、私はこの問題を解決するためのハックな方法も考え出しましたが、それが正しい方法かどうかはわかりません。

    @classmethod
    def recalculate(cls, self):
        z = cls.calculate(self)
        return z ** 2

また、構造のオブジェクト/モデル部分についても言及する価値があります。

#In model.py

class model(object):
    def __init__(self, attr1):
        self.attr1 = attr1

class submodel(model):
    def __init__(self, attr1, attr2):
        super().__init__(attr1)
        self.attr2 = attr2

だから私の希望はcalculatormodelなどと相互作用できるインターフェースクラスとして書くことです

チェプナー

calculate は、インスタンスを作成したかどうかに関係なくメソッドであり、そのように参照する必要があります。

class subcalculator(calculator):
    def calculate(self):
        return model.attr2 ** 3

    def recalculate(self):
        z = subcalculator.calculate(self)
        return z ** 2

もちろん、継承モデルcalculateに、呼び出す必要のあるメソッドを正確に決定させることをお勧めします。

def recalculate(self):
    z = self.calculate()
    return z ** 2

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クラスは、switchブロックでインスタンス化されているにもかかわらず、インターフェイスメソッドのみを呼び出すことができます

分類Dev

親クラスの関数がclassmethodまたはインスタンスメソッドによって子クラスから呼び出されていることをどのように知ることができますか?

分類Dev

インスタンスメソッドを静的メソッドとして呼び出せないようにすることはできますか?

分類Dev

クラスAはクラスBインスタンスをインスタンス化します。ClassBのインスタンスはどのようにしてクラスAのメソッドを呼び出すことができますか?

分類Dev

クラスメソッドをインスタンスからメソッドとして呼び出すのは悪いフォームですか?

分類Dev

メソッドのクラスのインスタンス内から静的メソッドを静的に呼び出すことが望ましいのはなぜですか?

分類Dev

インスタンスメソッドにモンキーパッチを適用するときに、新しい実装からオーバーライドされたメソッドを呼び出すことができますか?

分類Dev

Javaでインスタンス化されていないクラスからメソッドを呼び出すにはどうすればよいですか?

分類Dev

クラスのインスタンスメソッドを呼び出すと、初期化がメソッドとして表示されないのはなぜですか?

分類Dev

そのクラスメソッドが別のインスタンスによって呼び出されたときに、特定のクラスメソッドと呼ばれる特定のクラスのどのインスタンスが最後に呼び出されるかを見つけることは可能ですか?

分類Dev

このメソッドを呼び出さない場合、static_assertをクラスメソッドに入れることはできますか?

分類Dev

WCFはインターフェースされていないメソッドを呼び出しますか?

分類Dev

Typescriptで、イベントハンドラーとして呼び出される同じクラスの別のメソッドからクラスメソッドを呼び出すにはどうすればよいですか?

分類Dev

サブクラスがインスタンス化されたときにスーパークラスからメソッドを呼び出す

分類Dev

サブクラスがインスタンス化されたときにスーパークラスからメソッドを呼び出す

分類Dev

インスタンス化して「Calculate」メソッドを呼び出せないのはなぜですか?

分類Dev

基本クラスからメソッドを呼び出すときに、親クラスで値がまだ初期化されていません

分類Dev

Javascriptサブクラスのインスタンスメソッドは、その親の静的メソッドを呼び出すことができますか?

分類Dev

コンストラクタ内からメソッドを呼び出すことがJavaの悪い習慣と考えられているのはなぜですか?

分類Dev

既定のインターフェイスメソッドから静的インターフェイスメソッドを呼び出すときにこれを使用できないのはなぜですか?

分類Dev

コンストラクタから呼び出されないリターンを返すメソッド?

分類Dev

Javaのコンストラクターでメソッドを呼び出すことはできますか?

分類Dev

multiprocessing.Processがオブジェクトインスタンスからメソッドを呼び出せないのはなぜですか?そのピクルスの問題を理解することはできません

分類Dev

Javaのパブリッククラス内のパラメーター化されたコンストラクターから既定のコンストラクターを呼び出すことはできますか?

分類Dev

クラスのスコープ内でインスタンスを再作成せずに、クラス内でインスタンスのメソッドを呼び出すことはできますか?

分類Dev

リフレクションを使用してメソッドを呼び出すと、「オブジェクトは宣言クラスのインスタンスではない」と表示されるのはなぜですか?

分類Dev

javascriptクラスコンストラクター内で変数を宣言することと、前述のコンストラクター内で呼び出されるメソッドに対して、意味のあるパフォーマンスの違いはありますか?

分類Dev

親クラスまたは子クラスのいずれかから子クラスのオーバーライドされたメソッドを呼び出すことをどのように決定できますか?

分類Dev

別のクラスメソッド内から呼び出されたときにメソッド呼び出しを適切にモックできない

Related 関連記事

  1. 1

    クラスは、switchブロックでインスタンス化されているにもかかわらず、インターフェイスメソッドのみを呼び出すことができます

  2. 2

    親クラスの関数がclassmethodまたはインスタンスメソッドによって子クラスから呼び出されていることをどのように知ることができますか?

  3. 3

    インスタンスメソッドを静的メソッドとして呼び出せないようにすることはできますか?

  4. 4

    クラスAはクラスBインスタンスをインスタンス化します。ClassBのインスタンスはどのようにしてクラスAのメソッドを呼び出すことができますか?

  5. 5

    クラスメソッドをインスタンスからメソッドとして呼び出すのは悪いフォームですか?

  6. 6

    メソッドのクラスのインスタンス内から静的メソッドを静的に呼び出すことが望ましいのはなぜですか?

  7. 7

    インスタンスメソッドにモンキーパッチを適用するときに、新しい実装からオーバーライドされたメソッドを呼び出すことができますか?

  8. 8

    Javaでインスタンス化されていないクラスからメソッドを呼び出すにはどうすればよいですか?

  9. 9

    クラスのインスタンスメソッドを呼び出すと、初期化がメソッドとして表示されないのはなぜですか?

  10. 10

    そのクラスメソッドが別のインスタンスによって呼び出されたときに、特定のクラスメソッドと呼ばれる特定のクラスのどのインスタンスが最後に呼び出されるかを見つけることは可能ですか?

  11. 11

    このメソッドを呼び出さない場合、static_assertをクラスメソッドに入れることはできますか?

  12. 12

    WCFはインターフェースされていないメソッドを呼び出しますか?

  13. 13

    Typescriptで、イベントハンドラーとして呼び出される同じクラスの別のメソッドからクラスメソッドを呼び出すにはどうすればよいですか?

  14. 14

    サブクラスがインスタンス化されたときにスーパークラスからメソッドを呼び出す

  15. 15

    サブクラスがインスタンス化されたときにスーパークラスからメソッドを呼び出す

  16. 16

    インスタンス化して「Calculate」メソッドを呼び出せないのはなぜですか?

  17. 17

    基本クラスからメソッドを呼び出すときに、親クラスで値がまだ初期化されていません

  18. 18

    Javascriptサブクラスのインスタンスメソッドは、その親の静的メソッドを呼び出すことができますか?

  19. 19

    コンストラクタ内からメソッドを呼び出すことがJavaの悪い習慣と考えられているのはなぜですか?

  20. 20

    既定のインターフェイスメソッドから静的インターフェイスメソッドを呼び出すときにこれを使用できないのはなぜですか?

  21. 21

    コンストラクタから呼び出されないリターンを返すメソッド?

  22. 22

    Javaのコンストラクターでメソッドを呼び出すことはできますか?

  23. 23

    multiprocessing.Processがオブジェクトインスタンスからメソッドを呼び出せないのはなぜですか?そのピクルスの問題を理解することはできません

  24. 24

    Javaのパブリッククラス内のパラメーター化されたコンストラクターから既定のコンストラクターを呼び出すことはできますか?

  25. 25

    クラスのスコープ内でインスタンスを再作成せずに、クラス内でインスタンスのメソッドを呼び出すことはできますか?

  26. 26

    リフレクションを使用してメソッドを呼び出すと、「オブジェクトは宣言クラスのインスタンスではない」と表示されるのはなぜですか?

  27. 27

    javascriptクラスコンストラクター内で変数を宣言することと、前述のコンストラクター内で呼び出されるメソッドに対して、意味のあるパフォーマンスの違いはありますか?

  28. 28

    親クラスまたは子クラスのいずれかから子クラスのオーバーライドされたメソッドを呼び出すことをどのように決定できますか?

  29. 29

    別のクラスメソッド内から呼び出されたときにメソッド呼び出しを適切にモックできない

ホットタグ

アーカイブ