Wednesday, April 20, 2011

[Level 2] Python variable scope (2).

In previous, I wrote a paper for python variable scope.
This time, I try to use python native decorator to implement the same idea.

#!/usr/bin/env python
class C(object):
    def __init__(self):
        self._name = None
        self.__age = None

    @property
    def name(self):
        """I'm the 'name' propertage."""
        return self._name

    @name.setter
    def name(self, value):
        self._name = value

    @name.deleter
    def name(self):
        del self._name

    @property
    def age(self):
        pass

    @age.getter
    def age(self):
        return self.__age

    @age.setter
    def age(self, value):
        self.__age = value

if __name__ == '__main__':
    c = C() 
    c.name = 1 
    print c.name
    print c._name
    del c.name
    try:
        print c.name
    except AttributeError, e:
        #print "'C' object has no attribute '_name'"
        print e
    
    c.age = 2 
    print c.age
    try:
        print c.__age
    except AttributeError, e:
        #print "'C' object has no attribute '__age'"
        print e
    
    try:
        del c.age
    except AttributeError, e:
        #print "can't delete attribute"
        print e


$ ./testProperty.py 
1
1
'C' object has no attribute '_name'
2
'C' object has no attribute '__age'
can't delete attribute
$

Wish this helps. regards, Stanley Huang