我正在写一些课程:
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
答案 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