2

可能的重复: 有没有办法即时创建子类? 动态创建类 - Python

我想创建一个子类,其中唯一的区别是一些类变量,但我希望其他一切都保持不变。我需要动态地执行此操作,因为我只知道运行时的类变量值。

到目前为止,这是一些示例代码。我希望 FooBase.foo_var 为“默认”,但 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 回答