Python ClassMethod Error: takes exactly 1 argument (2 given)
Python ClassMethod Error: takes exactly 1 argument (2 given)
我创建了一个函数 ClassAttribsToDict,它将 class 中的用户定义属性转换为字典。
def ClassAttribsToDict(myclass):
return dict(filter(lambda (k,v): not k.startswith("__"),vars(myclass).items()))
class AnimalEnums(object):
dog = 0
cat = 2
horse = 7
对 class 名称执行函数会将其转换为字典
>>> ClassAttribsToDict(AnimalEnums)
{'horse': 7, 'dog': 0, 'cat': 2}
现在我尝试创建一个基础 class 并将此方法 ClassAttribsToDict 作为 class 方法 :
class EnumBase(object):
@classmethod
def ClassAttribsToDict(myclass):
return dict(filter(lambda (k,v): not k.startswith("__"),vars(myclass).items()))
然而,当我尝试在 class 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 使它们像枚举一样表现如下:
class LanguagesEnum(EnumBase):
EN = 0
CN = 1
FR = 2
DE = 3
并希望将 class 属性转换为字典
>>> LanguagesEnum.ClassAttribsToDict(LanguagesEnum)
实际上,通过添加 @classmethod
,您可以使 def ClassAttribsToDict
的第一个参数始终是它所包含的 class(在本示例中为 EnumBase
案件)。它类似于 class 中的“常规”方法总是以 self
开头,只是它采用 class 本身而不是 class 实例。
所以当你调用 EnumBase.ClassAttribsToDict(AnimalEnums) 时,从方法的角度来看,它实际上表现得像 ClassAttribsToDict(EnumBase, AnimalEnums)(因此它认为它有 2 个参数)。
无论如何:更改为 def ClassAttribsToDict(cls, myclass):
很可能适合您。
(还有一个旁注 - 根据 PEP8,你应该切换到 class_attribs_to_dict 的方法,classes 可以保持 CapsWords 风格)
我创建了一个函数 ClassAttribsToDict,它将 class 中的用户定义属性转换为字典。
def ClassAttribsToDict(myclass):
return dict(filter(lambda (k,v): not k.startswith("__"),vars(myclass).items()))
class AnimalEnums(object):
dog = 0
cat = 2
horse = 7
对 class 名称执行函数会将其转换为字典
>>> ClassAttribsToDict(AnimalEnums)
{'horse': 7, 'dog': 0, 'cat': 2}
现在我尝试创建一个基础 class 并将此方法 ClassAttribsToDict 作为 class 方法 :
class EnumBase(object):
@classmethod
def ClassAttribsToDict(myclass):
return dict(filter(lambda (k,v): not k.startswith("__"),vars(myclass).items()))
然而,当我尝试在 class 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 使它们像枚举一样表现如下:
class LanguagesEnum(EnumBase):
EN = 0
CN = 1
FR = 2
DE = 3
并希望将 class 属性转换为字典
>>> LanguagesEnum.ClassAttribsToDict(LanguagesEnum)
实际上,通过添加 @classmethod
,您可以使 def ClassAttribsToDict
的第一个参数始终是它所包含的 class(在本示例中为 EnumBase
案件)。它类似于 class 中的“常规”方法总是以 self
开头,只是它采用 class 本身而不是 class 实例。
所以当你调用 EnumBase.ClassAttribsToDict(AnimalEnums) 时,从方法的角度来看,它实际上表现得像 ClassAttribsToDict(EnumBase, AnimalEnums)(因此它认为它有 2 个参数)。
无论如何:更改为 def ClassAttribsToDict(cls, myclass):
很可能适合您。
(还有一个旁注 - 根据 PEP8,你应该切换到 class_attribs_to_dict 的方法,classes 可以保持 CapsWords 风格)