В Python 3, я обнаружил, что атрибут класса может быть использован в качестве аргумента в __init__()
функции, как показано ниже:Атрибут класса python не может использоваться в качестве аргумента для конструктора?
файл test.py:
class Foo:
var1 = 23333
def __init__(self, var=var1):
self.var = var
работать в ЦМД:
C:\Users\rikka\Desktop>py -3 -i test.py
>>> f1=Foo()
>>> f1.var
23333
но с использованием выражения dot.expression, когда init этого класса, интерпретатор сообщит об ошибке:
файл test2.py:
class Foo:
var1 = 23333
def __init__(self, var=Foo.var1):
self.var = var
работать в ЦМД:
C:\Users\rikka\Desktop>py -3 -i test2.py
Traceback (most recent call last):
File "test2.py", line 1, in <module>
class Foo:
File "test2.py", line 3, in Foo
def __init__(self, var=Foo.var1):
NameError: name 'Foo' is not defined
Я просто не знаю, почему переводчик не может найти имя «Foo», так как Foo это имя в глобальной системе координат в окружающей среде. есть ли что-то связанное с понятием понятие о классе python, которое я не совсем понимаю?
Пожалуйста, напишите, что вы на самом деле получаете без редактирования вручную. Второй образец кода с приглашением '>>>' выглядит как часть интерактивного сеанса Python, но трассировка происходит от выполнения скрипта. Если бы вы пробовали этот код в интерактивном режиме, вы бы увидели, что это определение класса, которое генерирует исключение, а не вызов для создания объекта. – Duncan
@ Duncan за советом! –