2

重複の可能性: オンザフライでサブクラスを作成する方法はありますか? クラスを動的に作成する - Python

唯一の違いがいくつかのクラス変数であるサブクラスを作成したいと思いますが、他のすべては同じままにしておきたいです。クラス変数の値は実行時にしか分からないため、これを動的に行う必要があります。

これまでのコード例をいくつか示します。FooBase.foo_var を「default」に、FooBar.foo_var を「bar」にしたいと考えています。これまでのところ、成功した試みはありません。

class FooBase(object):
    foo_var = "default"

    def __init__(self, name="anon"):
        self.name = name

    def speak(self):
        print self.name, "reporting for duty"
        print "my foovar is '" +  FooBase.foo_var + "'"


if __name__ == "__main__":
    #FooBase.foo_var = "foo"
    f = FooBase()
    f.speak()

    foobarname = "bar"
    #FooBar = type("FooBar", (FooBase,), {'foo_var': "bar"})
    class FooBar(FooBase): pass
    FooBar.foo_var = "bar"
    fb = FooBar()
    fb.speak()

どうもありがとう

編集して、明らかにこの行に問題があります:

print "my foovar is '" + FooBase.foo_var + "'"

受け入れられた答えはself.foo_varコードにあります。それが私がすべきことです。私は今、ばかげていると感じています。

4

1 に答える 1

3

これはどうですか:

def make_class(value):
  class Foo(object):
    foo_var = value

    def speak(self):
      print self.foo_var
  return Foo

FooBar = make_class("bar")
FooQux = make_class("qux")

FooBar().speak()
FooQux().speak()

とはいえ、foo_var の値をクラスのインスタンス変数にできないでしょうか。そのため、異なる動作ごとに異なるクラスを作成するのではなく、異なる入力でインスタンス化された同じクラスが異なる方法で動作します。

于 2013-10-18T00:08:51.410 に答える