15

次のようなクラスがあります。

class MyClass(object):
    int = None
    def __init__(self, *args, **kwargs):
        for k, v in kwargs.iteritems():
            setattr(self, k, v)

    def get_params(self):
        return {'int': random.randint(0, 10)}

    @classmethod
    def new(cls):
        params = cls.get_params()
        return cls(**params)

そして、私はできるようにしたいと思います:

>>> obj = MyClass.new()
>>> obj.int  # must be defined
9

の新しいインスタンスを作成しないことを意味しますが、スローMyClassを呼び出すため、明らかにそれほど単純ではありませんMyClass.new()TypeError: unbound method get_params() must be called with MyClass instance as first argument (got nothing instead)

それを達成する方法はありますか?ありがとう

4

2 に答える 2

16

いいえ、インスタンスのないクラスからインスタンス メソッドを呼び出すことはできません。これは 非常に悪いことです。ただし、インスタンス メソッドからクラス メソッドを呼び出すことはできます。オプションは

  1. get_paramクラス メソッドを作成し、それへの参照を修正する
  2. インスタンスメソッドなので、have __init__call 。get_param

また、あなたがやろうとしていることのように見えるので、 AttrDictに興味があるかもしれません。

于 2013-05-07T20:04:32.637 に答える