Передача self.var (атрибут экземпляра) в качестве параметра метода по умолчанию

При назначении num1 = self.var1 в функции num1 = self.var1 Python говорит о неразрешенной ссылке. Почему это?

 class Foo: def __init__(self): self.var1 = "xyz" def fiz(self, num1=self.var1): return 

One Solution collect form web for “Передача self.var (атрибут экземпляра) в качестве параметра метода по умолчанию”

Параметры метода (и функции) по умолчанию задаются при определении метода . Это приводит к общему значению Python, когда эти значения изменяемы: «Наименьшее удивление» и параметр Mutable Default Argument

В вашем случае, когда метод определен (а если было такое имя в области видимости), поскольку вы еще не закончили определять класс Foo , это не будет экземпляр Foo !). Вы можете 'также ссылайтесь на класс по имени внутри определения; ссылаясь на Foo , также вызывает NameError : могу ли я использовать атрибут класса как значение по умолчанию для метода экземпляра?

Вместо этого общий подход заключается в использовании None в качестве заполнителя, а затем присваивании значения по умолчанию внутри тела метода:

 def fiz(self, num1=None): if num1 is None: num1 = self.val1 ... 
  • как динамически создавать переменную класса в python
  • Есть ли способ выполнить цикл и выполнить все функции в классе Python?
  • строка переменной-члена обрабатывается как Tuple в Python
  • Могу ли я предоставить метод класса Python в качестве параметра?
  • Является ли код Python с классами медленнее?
  • Как я могу выбрать вложенный класс в python?
  • создание класса, вызываемого в одном экземпляре
  • Добавление членов данных в классы Python извне определения функции
  • Python - лучший язык программирования в мире.