Dynamische schreibgeschützte Attribute in Python-InstanzenPython

Python-Programme
Anonymous
 Dynamische schreibgeschützte Attribute in Python-Instanzen

Post by Anonymous »

Bearbeiten Dieser Code enthält mehrere Fehler. Weitere Informationen finden Sie in der Antwort von JSBueno für eine korrekte Version
Ich möchte schreibgeschützte Attribute erstellen, die Werte dynamisch aus einem internen Wörterbuch abrufen. Ich habe versucht, diese als Deskriptoren zu implementieren: < /p>

Code: Select all

from typing import Any

class AttDesc:
def __init__(self, name):
self.name = name

def __get__(self, obj, objtype=None):
return obj._d[self.name]

def __set__(self, obj, value):
raise AtrributeError("Read only!")

class A:
def __init__(self, klist: list[str], vlist: list[Any]) -> None:
self._d = dict(zip(klist, vlist))
for k in self._d:
setattr(type(self), k, AttDesc(k))

@property
def d(self):
return self._d
< /code>
Das [url=viewtopic.php?t=15738]Problem[/url] mit diesem Ansatz ist, dass die Deskriptorinstanzen Klassenattribute sind. Dies bedeutet, dass in einer interaktiven Sitzung: < /p>
    a1 = A(['x', 'y'], [1, 2])
a2 = A(['z', ], [3])
Wenn ich die Registerkarte für automatische Vervollständigung auf A1 drücke. Ich habe auch versucht, über die __Getattr __ Methode der Instanz zu implementieren:

Code: Select all

class B:
def __init__(self, klist: list[str], vlist: list[Any]):
object.__setattr__(self, '_d', dict(zip(klist, vlist)))

@property
def d(self):
return self._d

def __getattr__(self, name):
if name in self.d:
return self.d[name]
else:
object.__getattr__(name)

def __setattr__(self, k, v):
if k in self.d:
raise AttributeError("Read only!")
object.__setattr__(self, k, v)
Wenn ich B = B (['W'], [3]) In einer interaktiven Sitzung auf b. Bei einer interaktiven Sitzung werden beim Drücken der Registerkarte angegeben. Ich habe versucht, in den Pandas -Code zu schauen, aber es ist ein bisschen abstrus für mich. Ich denke, sie verwenden etwas Ähnliches wie meine zweite Option __getAttr __ , aber ich verstehe nicht, wie sie es funktionieren.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post