# @property for getterclass Circle: def __init__(self, radius): self._radius = radius @property def radius(self): return self._radiusCircle(5).radius#ans: 5 (accessed like attribute)
# @property.setterclass Circle: def __init__(self, radius): self._radius = radius @property def radius(self): return self._radius @radius.setter def radius(self, value): if value < 0: raise ValueError("Negative") self._radius = value
# property with calculationclass Circle: def __init__(self, radius): self._radius = radius @property def area(self): return 3.14 * self._radius ** 2Circle(5).area#ans: 78.5
# property without setterclass Person: def __init__(self, name): self._name = name @property def name(self): return self._nameperson = Person("Alice")#ans: person.name = "Bob" # AttributeError
# @property.deleterclass Person: def __init__(self, name): self._name = name @property def name(self): return self._name @name.deleter def name(self): del self._nameperson = Person("Alice")del person.name
# property vs method?class MyClass: @property def value(self): return 5obj = MyClass()obj.value#ans: 5 (no parentheses)
# setter without getter?class MyClass: @value.setter def value(self, x): pass#ans: NameError (@property needed first)
# property assignment?class MyClass: @property def value(self): return 5obj = MyClass()obj.value = 10#ans: AttributeError (no setter)
# property caching?class MyClass: @property def value(self): print("Computing") return 5obj = MyClass()obj.valueobj.value#ans: prints "Computing" twice
# property validation?class MyClass: @property def x(self): return self._x @x.setter def x(self, value): if value < 0: raise ValueError() self._x = value
# property in __init__?class MyClass: def __init__(self, x): self.x = x # calls setter @property def x(self): return self._x @x.setter def x(self, value): self._x = value
# delete without deleter?class MyClass: @property def value(self): return 5obj = MyClass()del obj.value#ans: AttributeError
# property inheritance?class Base: @property def x(self): return 5class Derived(Base): passDerived().x#ans: 5
# override property?class Base: @property def x(self): return 5class Derived(Base): @property def x(self): return 10Derived().x#ans: 10
# property with args?class MyClass: @property def value(self, arg): return arg#ans: TypeError (property takes no args)
Google tag (gtag.js)