2016-09-12 4 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

Прежде всего, необходимо создать экземпляр класса, как 'т = математике (3,4)', а затем получить доступ к его методам. – kaveh

+0

На самом деле, 'math (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 могу ли я добавить переменные по умолчанию, или мне не нужно? –

Смежные вопросы