我想动态地将类属性添加到超类。此外,我想创建从这个超类动态继承的类,这些子类的名称应该取决于用户输入。
有一个超类“Unit”,我可以在运行时向其中添加属性。这已经奏效了。
def add_attr (cls, name, value):
setattr(cls, name, value)
class Unit(object):
pass
class Archer(Unit):
pass
myArcher = Archer()
add_attr(Unit, 'strength', 5)
print "Strenght ofmyarcher: " + str(myArcher.strength)
Unit.strength = 2
print "Strenght ofmyarcher: " + str(myArcher.strength)
这将导致所需的输出:
Myarcher 的强度:5
Myarcher 的强度:2
但是现在我不想预定义子类Archer,而是让用户决定如何调用这个子类。我试过这样的事情:
class Meta(type, subclassname):
def __new__(cls, subclassname, bases, dct):
return type.__new__(cls, subclassname, Unit, dct)
factory = Meta()
factory.__new__("Soldier")
但没有运气。我想我还没有真正理解new在这里做了什么。结果我想要的是
class Soldier(Unit):
pass
由工厂创建。如果我用参数“Knight”调用工厂,我想创建一个 Knight 类,Unit 的子类。
有任何想法吗?提前谢谢了!
再见
-佐野