Утка, пробивая в собственности в питоне - PullRequest
5 голосов
/ 24 марта 2011

Я хотел бы иметь возможность добавить свойство http://docs.python.org/library/functions.html#property к объекту (конкретному экземпляру класса).Возможно ли это?

Некоторые другие вопросы о штамповке утки / исправлении обезьян в python:

Добавление метода в экземпляр существующего объекта

Python: изменение методов и атрибутов во время выполнения

ОБНОВЛЕНИЕ: Ответ delnan в комментариях

Динамическое добавление @property в Python

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

работает следующий код:

#!/usr/bin/python

class C(object):
    def __init__(self):
        self._x = None

    def getx(self):
        print "getting"
        return self._x
    def setx(self, value):
        print "setting"
        self._x = value
    def delx(self):
        del self._x
    x = property(getx, setx, delx, "I'm the 'x' property.")

s = C()

s.x = "test"
C.y = property(C.getx, C.setx, C.delx, "Y property")
print s.y

Но я не уверен, что вы должны это делать.

0 голосов
/ 20 июня 2013
class A:
    def __init__(self):
       self.a=10

a=A()
print a.__dict__
b=A()
setattr(b,"new_a",100)
print b.__dict__

Надеюсь, что это решит вашу проблему.

a.__dict__  #{'a': 10}
b.__dict__  #{'a': 10, 'new_a': 100}
...