1

この例を考えてみましょう。

class master:
    @classmethod 
    def foo(cls):
        cls.bar()

class slaveClass( master ):
    @classmethod 
    def bar(cls):
        print("This is class method")

slaveType = slaveClass
slaveType.foo()

class slaveInstance( master ):
    #def foo(self):
    #    self.foo()
    def __init__(self,data):
        self.data=data
        print("Instance has been made")
    def bar(self):
        print("This is "+self.data+" method")


slaveType = slaveInstance("instance")
slaveType.foo()

の最後の定義がコメントされていないときに機能することは知っていますが、使用法を変更せずにこの関数fooを使用する他の方法はありますか。foo私はクラスが物事の仕組みを定義し、方法を変えることができた大規模なプロジェクトを持っていslaveTypeますが、インスタンスが必要な場合があり、fooインスタンスの動作のためにオーバーライドできないような関数が少し多すぎます。

スタッカーありがとうございます!

4

1 に答える 1

0

classmethodのドキュメントをよく見てください。インスタンス メソッドは最初の引数としてインスタンスを渡し、クラス メソッドは最初の引数としてクラスを渡します。を呼び出すslaveType.foo()と、インスタンス がslaveTypeの最初の引数として渡されますfoo()foo()最初の引数としてクラスを期待しています。

于 2011-09-09T13:40:56.277 に答える