從班

2016-09-12 26 views
-1

調用方法我寫了一些類:從班

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

首先你需要實例類,比如'M =數學(3,4)',然後訪問它的方法。 – kaveh

+0

其實,數學(3,5).add()'當前如何使用你寫的東西 –

回答

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) 
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

+0

你的鏈接是靜態方法,但是你沒有使用任何? –

+0

靜態方法不需要代碼工作,所以我只提到它們作爲腳註。鑑於OP似乎對類很陌生,我不想將它們作爲我的解決方案的一部分,因爲那樣它們還必須學習如何以及何時使用靜態方法。 –

+0

@Curtis Lusmore我還可以添加默認變量,還是我不需要? –