why the attribute be deleted still in dir(man)?

luofeiyu elearn2014 at gmail.com
Sat Aug 23 18:49:53 EDT 2014


class Person(object):
        def addProperty(self, attribute):
               getter = lambda self: self._getProperty(attribute)
               setter = lambda self, value: self._setProperty(attribute, 
value)
               deletter = lambda self:self.delProperty(attribute)
               setattr(self.__class__, attribute, 
property(fget=getter,fset=setter,fdel=deletter,doc="Auto-generated method"))
        def _setProperty(self, attribute, value):
              setattr(self, '_' + attribute, value.title())
       def _getProperty(self, attribute):
             return getattr(self, '_' + attribute)
       def delProperty(self,attribute):
             delattr(self,'_' + attribute)

 >>> man=Person()
 >>> dir(man)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', 
'__form
at__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', 
'__le__',
  '__lt__', '__module__', '__ne__', '__new__', '__reduce__', 
'__reduce_ex__', '__
repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 
'__weakref_
_', '_getProperty', '_setProperty', 'addProperty', 'delProperty']
 >>> man.addProperty("name")
 >>> man.name="john"
 >>> dir(man)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', 
'__form
at__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', 
'__le__',
  '__lt__', '__module__', '__ne__', '__new__', '__reduce__', 
'__reduce_ex__', '__
repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 
'__weakref_
_', '_getProperty', '_name', '_setProperty', 'addProperty', 
'delProperty', 'name
']
 >>> man.name
'John'
 >>> man.delProperty("name")
 >>> man.name
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "<stdin>", line 4, in <lambda>
   File "<stdin>", line 12, in _getProperty
AttributeError: 'Person' object has no attribute '_name'
 >>> dir(man)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', 
'__form
at__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', 
'__le__',
  '__lt__', '__module__', '__ne__', '__new__', '__reduce__', 
'__reduce_ex__', '__
repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 
'__weakref_
_', '_getProperty', '_setProperty', 'addProperty', 'delProperty', 'name']





More information about the Python-list mailing list