#python-3.x
#python-3.x
Вопрос:
У меня есть класс
class AClass():
def a(self):
... code ...
def b(self):
... code ...
def c(self):
def d():
... call a() ...
... call b() ...
... call d() ...
Как я могу вызвать функции a и b из функции d c?
Комментарии:
1.
self.a
self.b
Не сработало?2. нет, не работает. не удается объявить d как «def d(self):»
3. вам не нужно объявлять d как
def d(self)
вызывающий d() внутри метода c, когда у d есть a(), а b() — это то же самое, что вызывать a() и b() .4. Я не объявлял d как def d(self): но также я не могу вызвать a и b из d . когда я запускаю приложение в режиме отладки с точкой останова, оно вызывает a и b . но когда я запускаю приложение без точки останова, оно не запускает ни a, ни b.
5. Я могу вызвать a() и b(), используя self.a() и self.b() . Конечно, я просто использую фиктивный класс, так что, вероятно, это совсем другая проблема?
Ответ №1:
class AClass():
def a(self):
print('A')
def b(self):
print('B')
def c(self):
def d():
self.a() # because 'self' is defined in the enclosing scope...
self.b() # ...it's valid to use within our definition of d()
d()
Обратите внимание, что определение функции d()
переоценивается и перекомпилируется по существу при каждом запуске c()
*. Как и любая другая функция, переменные, определенные во включающей области, допустимы для использования, поэтому мы можем вызывать методы для self
того, что было передано в C:
>>> inst = AClass()
>>> inst.c()
A
B
Как мы можем видеть, оба a()
и b()
были вызваны успешно.
* Это сложнее, но процесс компиляции точно в срок в python выходит за рамки этого ответа
Комментарии:
1. Это то, что я получаю, выполняя свой собственный тест, может быть, проблема OP заключается не только в этой реализации?