Я хочу динамически добавлять атрибуты класса в суперкласс. Кроме того, я хочу создать классы, которые наследуются от этого суперкласса динамически, и имя этих подклассов должно зависеть от пользовательского ввода.
Существует суперкласс "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)
Это приводит к желаемому результату:
Сила Мячера: 5
Сила Мячера: 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
создается фабрикой. И если я назову фабрику с аргументом «Рыцарь», я бы хотел, чтобы был создан класс Рыцарь, подкласс Unit.
Есть идеи? Большое спасибо заранее!
Bye
-Sano