从python中的类调用函数

时间:2015-04-28 20:49:37

标签: python function class

我正在尝试从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实例)

有人能告诉我哪里出错了吗?

3 个答案:

答案 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