2014-09-23 3 views
0

Мой код:Как вызвать одну функцию из другого с помощью Python?

def inner_function(self): 
    x = "one" 
    y = "two" 

def outer_function(self): 
    self.inner_function() 
    print "X is %" % x 
    print "Y is %" % y 

outer_function() 

Я хочу выход быть:

>>> X is one 
>>> Y is two 

Я думаю, что я не понимая правильного использования self в методе Python/функции.

Ошибка, которую я возвращаю сейчас: TypeError: outer_function() takes exactly 1 argument (0 given) Спасибо за любую помощь!

ответ

6

Понадобится:

def inner_function(): 
    x = "one" 
    y = "two" 
    return x, y 

def outer_function(): 
    x, y = inner_function() 
    print "X is %" % x 
    print "Y is %" % y 

outer_function() 

self используется для методов экземпляра в классе, но здесь вы используете только автономные функции.

В качестве альтернативы, для класса:

class MyClass: 
    def printme(self): 
     print(self.x) 

    def mymethod(self): 
     self.printme() 

a = MyClass() 
a.x = "One" 
b = MyClass() 
b.x = "Two" 

a.mymethod() 
b.mymethod() 

выведет:

One 
Two 

Как вы можете видеть, вы не должны (и не должны) явно передать self к способу - Python передает его неявно. Когда вы звоните a.mymethod(), self будет ссылаться на a, а когда вы позвоните b.mymethod(), self будет ссылаться на b. Без этого механизма printme(), через mymethod(), не мог бы знать, какой объект x для печати.

+1

спасибо. Именно поэтому я понимаю, что метод - это когда функция связана с классом. Затем, чтобы написать метод, мне нужно будет ссылаться на класс класса метода, поэтому я бы поставил 'self.method()' и 'def method_name (self):' когда я создаю методы? – YPCrumble

+1

Вы должны использовать 'self.method()' для вызова метода из другого метода внутри этого же класса. Вне класса вы должны создать объект и вызвать метод, например, 'var = MyClass()', за которым следует 'var.method()'. Точка каждого метода, имеющая аргумент 'self', заключается в том, что внутри самого класса вы не знаете, к какому объекту он может быть вызван, поэтому вам нужен способ ссылаться на то, что текущий объект есть, и это то, что 'является ссылкой. Автономные функции не связаны с объектами, поэтому 'self' будет неуместным. –

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