装饰器的类不能更改类变量

时间:2019-01-17 13:33:48

标签: python python-decorators

我有班级英雄

myparam

我需要创建装饰符咒语,例如:

/****************************************************/
SET IDENTITY_INSERT [dbo].[XHQ_HIER_DEF] ON;
GO
INSERT INTO [dbo].[XHQ_HIER_DEF]
           ([HIER_KEY]
           ,[HIER_NAME]
           ,[HIER_DESC]
           ,[SYNONYM_DEF_LEVEL]
           ,[CRT_XHQUSERID]
           ,[CRT_TIMESTAMP]
           ,[CRT_TZ_BIAS]
           ,[UPDT_XHQUSERID]
           ,[UPDT_TIMESTAMP]
           ,[UPDT_TZ_BIAS])
SELECT [HIER_KEY]
      ,[HIER_NAME]
      ,[HIER_DESC]
      ,[SYNONYM_DEF_LEVEL]
      ,[CRT_XHQUSERID]
      ,[CRT_TIMESTAMP]
      ,[CRT_TZ_BIAS]
      ,[UPDT_XHQUSERID]
      ,[UPDT_TIMESTAMP]
      ,[UPDT_TZ_BIAS]
  FROM [iNode-8-24-14-Orig].[dbo].[XHQ_HIER_DEF]
GO
SET IDENTITY_INSERT [dbo].[XHQ_HIER_DEF] OFF;
GO
/****************************************************/

但是当我使用它时,我会收到错误消息

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()

TypeError跟踪(最近一次通话)      在()中     ----> 1个人=狂暴(男性)

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

怎么了?

1 个答案:

答案 0 :(得分:0)

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

class Berserk(AbstractEffect): 
    def __init__(self, man):
        #....
        self.stats.Charisma -= 3

现在,由于Berserk(man)接受2个参数,因此您不应收到该错误。有关构造函数的更多信息,您可以查看this StackOverflow question可能会提供更多的见解。