У вас есть ошибка, которая маскируется тем фактом, что вы используете name
в глобальном пространстве имен. Когда вы используете переменную в методе, python проверяет пространство имен метода, а затем возвращается к глобальному пространству имен. return name
не видит локальный name
, но, к счастью (неудача), в глобальном пространстве имен есть name
, и это то, что возвращается. Если вы позже использовали это возвращаемое значение, вы обнаружите, что в нем есть экземпляр A.
Вместо этого используйте ссылку self.name
. Python найдет self
в пространстве имен метода и, увидев, что это пространство имен экземпляра объекта, сначала проверит пространство имен объекта, а затем вернется к пространству имен класса.
class A:
name = 10 # this is a class variable
def fun(self):
print('this is a function')
return self.name # this is the return value, but same 'name'
foo = A()
name = foo.fun()
# three references to the same object
print(name, A.name, foo.name)