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

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

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

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

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

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

 def fiz(self, num1=None): if num1 is None: num1 = self.val1 ...