Вызов функции в питон3
У меня есть такая конструкция в коде:
class Programm(Frame):
def calculation(self):
def one():
...
def two():
...
Далее внутри класса, но за пределами функции calculation я хочу получить вывод функции one. примерно вот так:
def call():
one()
Как это сделать и возможно ли это вообще?
Ответы (3 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
class Programm():
def calculation(self, val=None):
def one():
print('\tdef one():')
def two():
print('\tdef two():')
if val == "one":
one()
elif val == "two":
two()
def call(self, val=None):
self.calculation(val)
p = Programm()
print('\nВызываем -> p.call()')
p.call()
print('\nВызываем -> p.call("one")')
p.call("one")
print('\nВызываем -> p.call("one")')
p.call("two")
Автор решения: Zhihar
→ Ссылка
какой-то у вас извращённый код
но раз уж начали извращаться - можно так:
class A:
def method1(self):
def func1():
return 1
def func2():
return 2
return (func1, func2)
def method2(self):
return self.method1()[0]()
value = A()
print(value.method2())
Но почему не сделать все функции методами класса?
class A:
def func1(self):
return 1
def func2(self):
return 2
def method1(self):
return 3
def method2(self):
return self.func1()
value = A()
print(value.method2())
Если же вам надо, чтобы снаружи нельзя было вызвать некоторые методы - сделайте их приватными (используя двойное подчеркивание перед названием метода):
class A:
def __func1(self):
return 1
def func2(self):
return 2
def method1(self):
return 3
def method2(self):
return self.__func1()
value = A()
print(value.__func1()) # тут будет ошибка
print(value.method2()) # тут все будет хорошо работать
Автор решения: FotonPC
→ Ссылка
Попробуйте просто использовать оператор global.
class Programm:
def calculation(self):
def one():
print(1)
def two():
print(2)
global one, two
def call():
one()
call()
# Вывод - 1
однако это плохая практика, лучше так вообще не делать