从类中调用方法

时间:2016-09-12 01:11:36

标签: python python-2.7

我正在写一些课程:

bean_version = "1.0"
from random import randint
console = []
print "Running Bean v%s" % bean_version
#Math Function
class math(object):
    def __init__(self, op1 = 0, op2 = 0):
        self.op1 = op1
        self.op2 = op2
    def add(self):
        return self.op1 + self.op2
    def sub(self):
        return self.op1 - self.op2
    def mul(self):
        return self.op1 * self.op2
    def div(self):
        return self.op1 / self.op2

我意识到我能做的是:

math.add(math(3,5))
==>8

我想知道的是,有什么办法可以做到:

math.add(3,5)

Python 2.7.10

2 个答案:

答案 0 :(得分:1)

这是可能的。在这种情况下,您使用该类作为对操作符(add,sub,mul,div)进行逻辑分组的方法,并且您并不真正需要在类实例本身中初始化操作数。这需要staticmethods装饰器,代码如下所示。 你也可以在这里看到它:https://eval.in/639864

bean_version = "1.0"
from random import randint
console = []
print "Running Bean v%s" % bean_version
#Math Function
class math(object):
    def __init__(self):
        pass
    @staticmethod
    def add(op1, op2):
        return op1 + op2
    @staticmethod
    def sub(op1, op2):
        return op1 - op2
    @staticmethod
    def mul(op1, op2):
        return op1 * op2
    @staticmethod
    def div(op1, op2):
        return op1 / op2

print math.add(3,5)
print math.sub(3,5)
print math.mul(3,5)
print math.div(3,5)

答案 1 :(得分:0)

是的,当然。目前的问题是您要定义类,以便必须将操作数传递给构造函数,而不是运算符。试试这个:

class math(object):
    def add(self, op1=0, op2=0):
        return op1 + op2
    def sub(self, op1=0, op2=0):
        return op1 - op2
    def mul(self, op1=0, op2=0):
        return op1 * op2
    def div(self, op1=0, op2=0):
        return op1 / op2
m = math()
m.add(2, 3)

鉴于没有一种方法使用self,它们实际上应该是静态方法。见https://docs.python.org/2/library/functions.html#staticmethod