Python -Objekt -Proxy -Problem: Deskriptoren und @StaticMethodPython

Python-Programme
Anonymous
 Python -Objekt -Proxy -Problem: Deskriptoren und @StaticMethod

Post by Anonymous »

Ich versuche, ein Proxy (Wrapper) -Objekt zu erstellen, damit ich das Verhalten eines bereits instanziierten Objekts ändern kann. Die Attribute einer Wrapper -Klasse werden auf eine neu generierte Klasse (unter Verwendung von Typ ) zusammen mit den Attributen eines zugrunde liegenden Objekts eingestellt. Dies wird auf diese Weise durchgeführt, da Python __magische __ -Methoden nur dann korrekt funktionieren, wenn sie Mitglieder einer Klasse sind. CLS ist also eine Wrapper -Klasse, Client das zugrunde liegende Objekt:

Code: Select all

def __new__(cls, client, *args, **kwargs):
ns = {}
for i, attr in inspect.getmembers(client):
if i in ('__init__', '__new__', '__getattribute__', '__dict__'):
continue
ns[i] = attr
for i in cls.__dict__:
if i in ('__new__',):
continue
elif i == '__init__':
ns['_init_'] = getattr(cls, i)
continue
attr = getattr(cls, i)
ns[i] = attr
P = type(cls.__name__ + "." + client.__class__.__name__,
(Proxy2.BaseProxy,), ns)
P._client_ = client
return P(*args, **kwargs)
Das Problem stammt von @staticMethod /

Code: Select all

@classmethod
in der Wrapper -Klasse. Ich kann keine statische Methode aus einer Instanz aufrufen, da Self an sie übergeben wird. Ich habe versucht, __get __ zu verwenden, aber ohne Erfolg. Hier ist ein minimales Beispiel, das fehlschlägt: < /p>

Code: Select all

class SuperA:
@staticmethod
def static():
return 'static?'

class A:
def __getattribute__(self, attr):
v = object.__getattribute__(self, attr)
if hasattr(v, '__get__'):
v2 = v.__get__(None, self)
return v2
return v

A.static = getattr(SuperA, "static")
print(A.static())  # success
print(A().static())  # fail

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post