提问人:nurabha 提问时间:5/6/2022 更新时间:5/6/2022 访问量:382
Python ClassMethod 错误:恰好需要 1 个参数(给定 2 个)[重复]
Python ClassMethod Error: takes exactly 1 argument (2 given) [duplicate]
问:
我制作了一个函数 ClassAttribsToDict,它将类中用户定义的属性转换为字典。
def ClassAttribsToDict(myclass):
return dict(filter(lambda (k,v): not k.startswith("__"),vars(myclass).items()))
class AnimalEnums(object):
dog = 0
cat = 2
horse = 7
在类名上执行函数会将其转换为字典
>>> ClassAttribsToDict(AnimalEnums)
{'horse': 7, 'dog': 0, 'cat': 2}
现在我尝试创建一个基类,并将此方法 ClassAttribsToDict 作为类方法包含:
class EnumBase(object):
@classmethod
def ClassAttribsToDict(myclass):
return dict(filter(lambda (k,v): not k.startswith("__"),vars(myclass).items()))
但是,当我尝试在类 EnumBase 上调用 ClassAttribsToDict 函数时,出现以下错误:
>>> EnumBase.ClassAttribsToDict(AnimalEnums)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ClassAttribsToDict() takes exactly 1 argument (2 given)
此外,我想继承 EnumBase 类,使它们的行为方式如下:
class LanguagesEnum(EnumBase):
EN = 0
CN = 1
FR = 2
DE = 3
并期望将类属性转换为字典
>>> LanguagesEnum.ClassAttribsToDict(LanguagesEnum)
答:
2赞
bmjeon5957
5/6/2022
#1
实际上,通过添加,您使 的第一个参数始终是它所包含的类(在这种情况下)。这类似于类中的“常规”方法总是以 开头,只是它采用类本身而不是类实例。@classmethod
def ClassAttribsToDict
EnumBase
self
因此,当您调用 EnumBase.ClassAttribsToDict(AnimalEnums) 时,从方法的角度来看,它实际上类似于 ClassAttribsToDict(EnumBase, AnimalEnums)(因此它认为它有 2 个参数)。
无论如何:更改为很可能会为您工作。def ClassAttribsToDict(cls, myclass):
(另外一个旁注 - 根据 PEP8,您可能应该切换到 class_attribs_to_dict 方法,类可以保持 CapsWords 风格)
评论