Python 装饰师';s类不能更改类变量

Python 装饰师';s类不能更改类变量,python,python-decorators,Python,Python Decorators,我有班上的英雄 class Hero: def __init__(self): self.positive_effects = [] self.negative_effects = [] self.stats = { "HP": 128, "MP": 42, "SP": 100, "Strength": 15, "Perception": 4

我有班上的英雄

class Hero:
    def __init__(self):
        self.positive_effects = []
        self.negative_effects = []

        self.stats = {
            "HP": 128,
            "MP": 42,
        "SP": 100,

        "Strength": 15,
        "Perception": 4,
        "Endurance": 8,
        "Charisma": 2,
        "Intelligence": 3,
        "Agility": 8,
        "Luck": 1
    } 

def get_positive_effects(self):
    return self.positive_effects.copy()

def get_negative_effects(self):
    return self.negative_effects

def get_stats(self):
    return self.stats.copy()
我需要创建装饰咒语,例如:

class AbstractEffect(Hero):
    def __init__(self, base):
            self.base = base

    def get_stats(self):
            self.base.get_stats()   

    def get_positive_effects(self):
        self.base.get_positive_effects()

    def get_negative_effects(self):
        self.base.get_negative_effects()

class Berserk(AbstractEffect): 
    def __init__(self):
        self.positive_effects.append('Berserk')
        self.stats.HP += 50
        self.stats.Strength += 7
        self.stats.Endurance += 7
        self.stats.Agility += 7
        self.stats.Luck += 7
        self.stats.Intelligence -= 3
        self.stats.Perception -= 3
        self.stats.Charisma -= 3
但是当我使用它的时候,我会犯错误

man = Hero()
man = Berserk(man)
TypeError回溯(最近一次调用上次) 在() ---->1人=狂暴(人)


怎么了

发生此错误的原因是
Berserk
的构造函数不接受
Man
类型的对象。因此,您必须做的是更改构造函数的参数,这样您就可以传入
Berserk(man)

现在,由于Berserk(man)接受两个参数,因此不应该出现错误。有关构造函数的更多信息,您可以查看可能提供更多信息的方法。

您的berserk类init方法只接受一个参数(self),但您正在传递2,self和man。您在哪里看到“装饰器类”?或者您对“decorator”的定义与Python的decorator(cf)概念完全无关?如果是,您可能需要编辑问题的标题。
TypeError: __init__() takes exactly 1 argument (2 given)
class Berserk(AbstractEffect): 
    def __init__(self, man):
        #....
        self.stats.Charisma -= 3