Python -Deskriptoren zu Readonly -AttributenPython

Python-Programme
Anonymous
 Python -Deskriptoren zu Readonly -Attributen

Post by Anonymous »

Ich möchte einen großen Teil meines Codes in einen generischen Deskriptor umrüsten, um nur den Zugriff auf den Attribut zu lesen. Das Folgende ist ein Beispiel für die Eigentumsbasis -Implementierung < /p>

Code: Select all

class A:
def __init__(self, n):
self._n = n
self._top = -1

@property
def n(self):
return self._n

@property
def top(self):
return self._top

def increase(self):
self._top += 1
< /code>
Sie sehen, dass ich meine A -Klasse initialisieren und self._top erhöhen kann, aber nicht zulassen kann, dass Benutzer A.TOP nach
Setzer -Methode der Eigenschaft weglassen < /p>
a = A(7)
a.top
Out[25]: -1
a.increase()
a.top
Out[27]: 0
Wenn ich a.top = 4 mache, gibt es mir einen Fehler
AttributeError: property 'top' of 'A' object has no setter
< /code>
, was erwartet wird. Jetzt möchte ich diese Logik in einen Deskriptor < /p>
neu gestaltenclass ReadOnly:

def __init__(self):
self._name = None

def __set_name__(self, owner, name):
self._name = name

def __get__(self, instance, owner):
if instance is None:
return self
return instance.__dict__[self._name]

def __set__(self, instance, value):
raise AttributeError("Can't set attribute")

def __delete__(self, instance):
raise AttributeError("Can't delete attribute")

class A:
n = ReadOnly()
top = ReadOnly()

def __init__(self, n):
self.n = n
self.top = -1

def increase(self):
self.top += 1
< /code>
Nun, das funktioniert nicht. Ich kann die Klasse A nicht einmal initialisieren, Ursache in init , es wird n und top sofort festlegen und verhindern, dass meine initialisieren.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post