[quote="EyDu"]Also wenn sich hier nicht direkt eine Metaklasse anbietet. Sorry wegen des unkommentierten Codes, aber ist gerade knapp mit der Zeit...
Code: Alles auswählen
class PropMeta(type):
def __new__(mcls, name, bases, clsdict):
for name, value in clsdict.iteritems():
try:
name = value._property_name
except AttributeError:
pass
else:
clsdict[name] = property(**value())
return super(PropMeta, mcls).__new__(mcls, name, bases, clsdict)
def propdec(function):
function._property_name = function.__name__
return function
class Spam(object):
__metaclass__ = PropMeta
def __init__(self, value):
self.value = value
print self.aproperty
self.aproperty = 4
print self.aproperty
@propdec
def aproperty():
def fget(self):
return self.value**2
def fset(self, value):
self.value = value
doc = "some value"
return locals()
Der Dekorator ließe sich noch locker um einen property-Namen erweitern, aber da hatte ich jetzt keine Lust zu.
Edit:
Das mein Beispiel funktioniert sieht man ja, aber ich frage mich, ob es sich dafür wirklich lohnt, jedes mal das entsprechende Modul zu importieren, die Metaklasse zu setzen und dann noch die Konflikte mit eventuell anderen benötigten Metaklassen zu lösen.