Python - вызов метода внутри класса - поведение зависит от источника вызова - PullRequest
0 голосов
/ 17 января 2020

Я новичок в объектно-ориентированном программировании в Python. На снимке экрана показана проблема, с которой я сталкиваюсь - когда метод экземпляра f () вызывается извне класса, он работает, но при вызове из другого метода в том же классе он выдает ошибку. почему это происходит? Как я могу это исправить?

class C:
    def f1(self):
        print(self.a)
    def g(self):
        f1()

c = C()
c.a = 'aa'
c.f1()
c.g()

Вывод:

aa
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-8d929c63c841> in <module>
      8 c.a = 'aa'
      9 c.f1()
---> 10 c.g()

<ipython-input-1-8d929c63c841> in g(self)
      3         print(self.a)
      4     def g(self):
----> 5         f1()
      6 
      7 c = C()

NameError: name 'f1' is not defined

1 Ответ

0 голосов
/ 17 января 2020

Python имеет очень открытую область, за исключением случаев, когда функции или переменные объявляются в классе. Переменная, объявленная в al oop, останется вне l oop, в отличие от многих распространенных языков. Однако функции и переменные внутри класса будут существовать в рамках класса. Поэтому, если вы объявите класс, такой как C, с функцией внутри, он будет ожидать, что он будет частью класса, в котором он находится (следовательно, необходимо передать self), и вам нужно будет указать self при вызове функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...