Lassen Sie uns sagen, dass ich die folgende Descriptor haben:Wie kann ich auf Attribute zugreifen, die in Python-Deskriptoren gespeichert sind?
class MyDescriptor(object):
def __init__(self, name, type_):
self.name = name
self.type_ = type_
def __set__(self, obj, value):
assert isinstance(value, self.type_)
obj.__dict__[self.name] = value
Gibt es eine Möglichkeit type_
von einem Objekt zuzugreifen MyDescriptor
beschäftigt?
heißt
class MyObject(object):
x = MyDescriptor('x', int)
my_object = MyObject()
my_object.x = 5
print my_object.x.type_
Soweit ich weiß, wird diese erhöhen AttributeError
als my_object.x
ist ein int
. Aber ich frage mich, ob es eine gute Möglichkeit gibt, Metadaten mit Deskriptoren zu verknüpfen.
EDIT: angepasste Formulierung, um anzuzeigen, dass es eine Instanz eines Deskriptors pro Klasse gibt.
Ich glaube nicht, dass es einen Grund gibt, das Feld 'type_' mit dem Unterstrich zu benennen. Für den Parameter macht es Sinn, aber 'self.type' beschattet nichts, also ist es in Ordnung. –
Check out http://StackOverflow.com/Questions/21629397/neat-way-to-get-descriptor-object –
@alex Halle Guter Punkt! Aber obwohl das zutrifft, führt dies in der Praxis zu einem Code wie 'self .__ class __. X.type_' oder' my_object .__ class __. X.type'. Welche, nehme ich an, ist nicht schrecklich. – matthewatabet