11

次のように定義されたクラスのコレクション:

class A():
    @staticmethod
    def call():
        print('a')

class C(type):
    def __repr__(self):
        return 'somename'

class B(A):
    __metaclass__ = C

    @staticmethod
    def call():
        print('b')

    def boundcall(self):
        print('bound')

実行すると、次のエラーが発生します。

TypeError: Error when calling the metaclass bases
    a new-style class can't have only classic bases

コードにBの既知の文字列表現を含めるには、メタクラス(私は思う)が必要です。それを持っている理由は重要ではありませんが、それは将来のアップデートに大いに役立ちます。

したがって、CがBのメタクラスであり、BがAのサブクラスである必要があると仮定すると、ここで何が問題になっているのか、エラーを削除するために何を変更するのかを誰かに教えてもらえますか?

4

2 に答える 2

18

問題はラインです

class A():

そのはず:

class A(object):

そうすれば、Aを新しいスタイルのクラスにします。空のparensはまったく意味がありませんが、それでも、stackoverflowやあらゆる場所でそれらを確認しています。なんで、なんで?

于 2012-03-13T01:37:12.267 に答える
0

私の場合、パッケージのバージョンを減価償却してみました。機能した !

2番目のトライアル、これはバージョンの問題のためにpython2にありました。コードをpython3にアップグレードします。できます。

于 2021-09-06T13:54:10.877 に答える