クラス属性をスーパークラスに動的に追加したいと思います。さらに、このスーパークラスから動的に継承するクラスを作成したいので、それらのサブクラスの名前はユーザー入力に依存する必要があります。
実行時に属性を追加できるスーパークラス「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)
これにより、目的の出力が得られます
。Strenght ofmyarcher:5
Strenght ofmyarcher:2
しかし、今はサブクラスArcherを事前に定義したくはありませんが、このサブクラスの呼び出し方法をユーザーに決定させたいと思います。私はこのようなことを試しました:
class Meta(type, subclassname):
def __new__(cls, subclassname, bases, dct):
return type.__new__(cls, subclassname, Unit, dct)
factory = Meta()
factory.__new__("Soldier")
しかし、運はありません。私はここで何が新しいのか本当に理解していないと思います。結果としてここに欲しいのは
class Soldier(Unit):
pass
工場で作成されています。そして、「ナイト」という引数でファクトリを呼び出すと、ユニットのサブクラスであるクラスナイトを作成したいと思います。
何か案は?よろしくお願いします!
さようなら
-佐野