我正在尝试从python中的类调用函数。这是我的代码:
class JCMT:
def be(self):
if self > 330000:
return 0.64
else:
return 0.69
def bs(self):
if self > 330000:
return 14
else:
return 20
f = 220258
print JCMT.bs(f)
我收到TypeError的错误:必须使用JCMT实例作为第一个参数调用unbound方法bs()(改为使用int实例)
有人能告诉我哪里出错了吗?
答案 0 :(得分:5)
有一些问题,我发表了评论:
class JCMT:
# Add parameter
def bs(self, n):
if n > 330000:
return 14
else:
return 20
f = 220258
# Make a new instance
j = JCMT()
# Call now, and pass variable
print j.bs(f)
方法签名中的self
部分是唯一的。您可以在this answer中了解有关它的更多信息。
答案 1 :(得分:5)
在函数正上方添加一个静态方法装饰器,表示在类上调用的静态函数:
@staticmethod
问题是你的self参数对应于在函数调用期间隐式传递的实例对象,因此在提供类时会引发错误。您必须删除self
参数并使用参数来表示数字参数。
答案 2 :(得分:0)
在答案中已经提供的@staticmethod
装饰器解决了这个特殊问题,如果将来你想使用类方法并保留self,你也可以使用@classmethod
装饰器来调用直接方法而不首先实例化该类。
class JCMT:
@classmethod
def be(self, n):
if n > 330000:
return 0.64
else:
return 0.69
@classmethod
def bs(self, n):
if n > 330000:
return 14
else:
return 20
f = 220258
print JCMT.bs(f)
20