Wie packen Sie eine Python -Eigenschaft aus, um Attribute vom Getter zu erhalten?Python

Python-Programme
Anonymous
 Wie packen Sie eine Python -Eigenschaft aus, um Attribute vom Getter zu erhalten?

Post by Anonymous »

von "Outside", wie kann ich in der Getter -Funktion einer Eigenschaft auf Attribute zugreifen, indem ich sie in einer Python -Eigenschaft oder auf andere Weise ausschüttete, seine Funktion __ -__ scheint eine Wrapper eines Wrappers eines Wrappers zu sein. Getter. Tatsächlich scheint die Auswbratrenditen das gleiche gleiche Objekt und ID zu sein wie das, was ausgepackt wurde. Sehen Sie sich das MRE und seine Ausgabe unten an.

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post