Ist es möglich, Attribute in einer Python -Unterklasse mit __SLOTS zu begrenzen?Python

Python-Programme
Anonymous
 Ist es möglich, Attribute in einer Python -Unterklasse mit __SLOTS zu begrenzen?

Post by Anonymous »

Eine Verwendung von __SLOTS __ in Python besteht darin, neue Attribute zu verbieten:

Code: Select all

class Thing:
__slots__ = 'a', 'b'

thing = Thing()
thing.c = 'hello'   #   error
< /code>
Dies funktioniert jedoch nicht, wenn eine Klasse von einer anderen slotless-Klasse erbt: < /p>
class Whatever:
pass

class Thing(Whatever):
__slots__ = 'a', 'b'

thing = Thing()
thing.c = 'hello'   #   ok
Das liegt daran, dass es auch das __dict __ von seinem übergeordneten erbt, das zusätzliche Attribute zulässt. Natürlich. Dies wird wiederum zu einer größeren Diskussion über die Vererbung eingebaut. Da jedoch ein Kreis restriktiver ist, würde dies gegen das Liskov -Substitutionsprinzip verstoßen, da eine Unterklasse nicht weniger als die übergeordnete Klasse ausführen sollte.
In diesem Fall bin ich mir nicht sicher, ob er hier gilt. Python hat keine Zugriffsmodifikatoren, sodass Objektdaten bereits zu exponiert sind. Ferner, ohne __SLOTS __ Python -Objekte sind ziemlich promiskuitiv beim Hinzufügen zusätzlicher Attribute, und ich bin mir nicht sicher, ob dies wirklich Teil der beabsichtigten Diskussion ist.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post