Je souhaite définir les propriétés d'une classe à partir d'une fonction membre. Voici un code de test montrant comment je voudrais que cela fonctionne. Cependant, je n'obtiens pas le comportement attendu.Comment définir les propriétés dans __init__
class Basket(object):
def __init__(self):
# add all the properties
for p in self.PropNames():
setattr(self, p, property(lambda : p))
def PropNames(self):
# The names of all the properties
return ['Apple', 'Pear']
# normal property
Air = property(lambda s : "Air")
if __name__ == "__main__":
b = Basket()
print b.Air # outputs: "Air"
print b.Apple # outputs: <property object at 0x...>
print b.Pear # outputs: <property object at 0x...>
Comment puis-je faire en sorte que cela fonctionne?
Je suis en désaccord que la bonne façon de le faire serait une métaclasse. Les métaclasses sont trop puissantes pour cela, car cela peut être accompli en utilisant des moyens moins puissants. –
Merci pour la mise à jour. En fait, je ne suis jamais allé aussi loin que Metaclasses en Python. Peut-être que c'est une bonne raison de commencer à lire à leur sujet. – pkit