Видя очень интересный код здесь , я пытаюсь использовать функцию как класс со следующим кодом:
def CF_ptrec(sname='', sage=0, sgender=''):
name = sname
age = sage
gender=sgender
def getname():
return name
def setname(ssname):
global name; name = ssname
def getgender():
return gender
def setgender(ssgender):
global gender; gender = ssgender
def getage():
return age
def setage(ssage):
print("in setage fn; val rcd: ", ssage) # just for testing;
global age
age = ssage
def printrep():
print("Name: ", name)
print("Age: ", age)
print("Gender: ", gender)
print("===========================")
return { # a dictionary
"getname":getname, "setname":setname,
"getage":getage, "setage":setage,
"getgender":getgender, "setgender":setgender,
"printrep": printrep }
Я могу создавать объекты и вызывать функцию для печати их деталей:
# CREATE OBJECTS:
arec = CF_ptrec("Ram", 5, "M")
brec = CF_ptrec("Tom", 15, "M")
# PRINT THEIR RECORDS:
arec["printrep"]()
brec["printrep"]()
Вывод:
Name: Ram
Age: 5
Gender: M
===========================
Name: Tom
Age: 15
Gender: M
===========================
Однако, если я пытаюсь изменить значение возраста этих объектов, он не работает:
# CHANGE AGE VALUES:
arec['setage'](25)
brec['setage'](25)
# PRINT RECORDS:
arec["printrep"]()
brec["printrep"]()
Вывод:
in setage fn; val rcd: 25
in setage fn; val rcd: 25
Name: Ram
Age: 5
Gender: M
===========================
Name: Tom
Age: 15
Gender: M
===========================
Где проблема и как ее можно решить?