Code: Select all
classinstance.__class__.propertygetterfunction._privateattribute
In meiner realen Situation war der Getter nicht dynamisch definiert und wird nur bei der Synthese der Eigenschaft verwiesen. Sobald es erstellt wurde, gibt es keine anderen Verweise auf den Getter, außer was in der Eigenschaft vergraben ist. Wert.
Code: Select all
from inspect import unwrap
class propholder:
def __init__(self):
self.__class__.propgetter._usecount=0
def propgetter(self):
self.__class__.propgetter._usecount=self.__class__.propgetter._usecount +1
print(f"getcount= {self.__class__.propgetter._usecount}")
return self.__class__.propgetter._pvalue # set by the setter
def propsetter(self, v):
self.__class__.propgetter._pvalue=v
# function to delete _age attribute
def propdeleter(self):
del self.__class__.propgetter
del self.__class__.propsetter
del self.__class__.propdeleter
aprop = property(propgetter, propsetter, propdeleter)
ap = propholder()
for i in [10,11,12]:
ap.aprop=i
print(f" ap.aprop={ap.aprop} ")
prop_get=ap.__class__.aprop.__get__
u=unwrap(prop_get)
print( f"\n prop_get=ap.__class__.aprop.__get__ = {prop_get} of type {prop_get.__class__} at {id(prop_get)} ")
print( f" u=unwrap(prop_get) = {u} of type {u} at {id(u)} ")
un=u
for i in range(2,6):
u=unwrap(u)
print( f" u=unwrap(u) = {u} of type {u} at {id(u)} ")
< /code>
Ergebnisse: < /p>
getcount= 1
ap.aprop=10
getcount= 2
ap.aprop=11
getcount= 3
ap.aprop=12
prop_get=ap.__class__.aprop.__get__ = of type at 126128955449232
u=unwrap(prop_get) = of type at 126128955449232
u=unwrap(u) = of type at 126128955449232
u=unwrap(u) = of type at 126128955449232
u=unwrap(u) = of type at 126128955449232
u=unwrap(u) = of type at 126128955449232