Property decorate struggle

I’ve tried to use properties in order to substitute the property function, but even though i did the same thing as in the exercise (the only difference is that a defined more than one propertie in the init instead of just one) and it keep not working in the jupyter notebook.

My code is down below (pretend # = @, because i can only use @ twice, so i’ve changed to be able to publish my topic):

class residente:
def init(self, name, age, program):
self.name = name
self.age = age
self.program = program
print(self.name, “is a student living in Pavia”, self.age, “years old”, “and studying a”, self.program, “.”)
#properties
def name(self):
return self.name
#name.setter
def name(self, name):
self.name = name
#name.getter
def name(self):
return self.name
#name.deleter
def name(self):
del self.name

#properties
def age(self):
    return self.age
#age.setter
def age(self, age):
    self.age = age   
#age.deleter
def age(self):
    del self.age
    
#properties
def program(self):
    return self.program
#program.setter
def program(self, program):
    self.program = program
#program.deleter
def program(self):
    del self.program

Bernardo = residente(“Bernardo”, “23”, “Medicine in English”)

And i get the following name error:


NameError Traceback (most recent call last)
/var/folders/gc/84lx4tf924d11wzncl5qshbc0000gn/T/ipykernel_5148/2111003930.py in
----> 1 class residente:
2 def init(self, name, age, program):
3 self.name = name
4 self.age = age
5 self.program = program

/var/folders/gc/84lx4tf924d11wzncl5qshbc0000gn/T/ipykernel_5148/2111003930.py in residente()
5 self.program = program
6 print(self.name, “is a student living in collegio cairoli with”, self.age, “years old”, “and studying a”, self.program, “.”)
----> 7 #properties
8 def name(self):
9 return self.name

NameError: name ‘properties’ is not defined

1 Like

If you’re posting code to the forums please see How do I format code in my posts? which keeps the format/indentation and makes it all much nicer.

There might be a few issues here, the decorator you’re after is @property not properties. You’ll want a different attribute name for your “private” or “hidden” attribute, e.g. an an underscore for ._name. Re-using the name as a function will clobber one or both of them. There’s also no requirement to add a deleter (or a setter for that matter) so unless you really want users to be able to delete (or set) the “private” attribute you’re setting as a property it’s best to just not add those methods.

The docs have an example you can follow- https://docs.python.org/3/library/functions.html#property