-------------------------------------------------------------------------------------------------------
class A(object):
def
__init__(self):
self.__id = None
def id(self,id =
None):
def __get__():
print 'get
id..'
return
self.__id
def __set__(id):
print 'set
id..'
self.__id
= id
if id:
return
__set__(id)
else:
return
__get__()
class B(object):
def __init__(self,
id=None, name=None):
self.__id = None
self.id = self._id(id=id)
def _id(self,id =
None):
def __get__():
print 'get
id..'
return
self.__id
def __set__(id):
print 'set
id..%s' % (id + 10)
self.__id
= id
return
self.__id
if id:
return
__set__(id)
else:
return
__get__()
class C(object):
def
__init__(self):
self.__id = None
def __setattr__(self,
name, value):
if name == 'id':
print 'set
id ..'
self.__id
= value
def
__getattribute__(self, name):
if name == 'id':
print 'get
id ...'
return
self.__id
class D(object):
def __init__(self,
**args):
self.clumns = ['id', 'name']
for i in self.clumns:
exec("self.__%s='%s'" % (i, args.get(i)))
self.__setattr__ = self.__setattr__
self.__getattribute__ =
self.__getattribute__
def __setattr__(self,
name, value):
if not self.check_clumns(name): return
print 'set:%s value:%s ...' % (name,
value)
if name == 'id':
self.__id
= value
def
__getattribute__(self, name):
#if not self.check_clumns(name): return
#RuntimeError: maximum recursion depth
exceeded
print self.check_clumns(name)
exec('value = self.__%s' % name)
#value = self.name
print 'get %s value:%s ...' %
(name, value)
return value
def check_clumns(self,
name):
print name in self.self.clumns
return name in self.self.clumns
class E(object):
def __init__(self,
**args):
self.clumns = ['id', 'name']
for i in self.clumns:
exec("self.__%s='%s'" % (i, args.get(i)))
self.__setattr__ = self.__setattr
self.__getattribute__ =
self.__getattribute
def __setattr(self,
name, value):
if not self.check_clumns(name): return
print 'set:%s value:%s ...' % (name,
value)
if name == 'id':
self.__id
= value
def __getattribute(self,
name):
if not self.check_clumns(name): return
exec('value = self.__%s' % name)
#value = self.name
print 'get %s value:%s ...' %
(name, value)
return value
def check_clumns(self,
name):
if name in self.self.clumns:return True
class F(object):
def __init__(self,
**args):
self.clumns = ['id', 'name']
for i in self.clumns:
exec("self.__%s='%s'" % (i, args.get(i)))
self.__setattr__ = self.__setattr
self.__getattribute__ =
self.__getattribute
def __setattr(self,
name, value):
print 'set name:%s' % name
if name not in self.clumns: return
print 'set:%s value:%s ...' % (name,
value)
if name == 'id':
self.__id
= value
def __getattribute(self,
name):
print 'get name:%s' % name
if name not in self.clumns: return
exec('value = self.__%s' % name)
#value = self.name
print 'get %s value:%s ...' %
(name, value)
return value
class G(object):
def __init__(self,
**args):
global clumns
clumns = ['id', 'name']
for i in clumns:
exec("self.__%s='%s'" % (i, args.get(i)))
def __setattr__(self,
name, value):
global clumns
print 'set:%s value:%s ...' % (name,
value)
if name not in clumns: return
print 'set:%s value:%s ...' % (name,
value)
if name == 'id':
self.__id
= value
def
__getattribute__(self, name):
global clumns
print 'get name:%s' % name
if name not in clumns: return
exec('value = self.__%s' % name)
#value = self.name
print 'get %s value:%s ...' %
(name, value)
return value
class H(object):
def __init__(self,
**args):
global clumns
clumns = ['id', 'name']
for i in clumns:
s =
'global %s' % i
print
s
exec(s)
s =
"%s='%s'" % (i, args.get(i))
print
s
exec(s)
def __setattr__(self,
name, value):
global clumns
for i in clumns:
s =
'global %s' % i
print
s
exec(s)
print 'set:%s value:%s ...' % (name,
value)
if name not in clumns: return
print 'set:%s value:%s ...' % (name,
value)
if name == 'id':
__id =
value
def
__getattribute__(self, name):
global clumns
for i in clumns:
exec('global %s' % i)
print 'get name:%s' % name
if name not in clumns: return
exec('value = %s' % name)
#value = self.name
print 'get %s value:%s ...' %
(name, value)
return value
class _H(object):
def
__init__(self):
pass
class H(object):
def __init__(self,
**args):
global clumns, HH
HH = _H()
clumns = ['id', 'name']
for i in clumns:
s =
"HH.%s='%s'" % (i, args.get(i))
print
s
exec(s)
def __setattr__(self,
name, value):
global clumns, HH
print 'set:%s value:%s ...' % (name,
value)
if name not in clumns: return
print 'set:%s value:%s ...' % (name,
value)
if name == 'id':
s = "HH.%s
= %s" % (name, value)
def
__getattribute__(self, name):
global clumns, HH
print 'get name:%s' % name
if name not in clumns: return
exec('value = HH.%s' % name)
print 'get %s value:%s ...' %
(name, value)
return value
class I(object):
def __init__(self,
**args):
global _I, clumns
class __I(): pass
_I = __I()
clumns = ['id', 'name']
for i in clumns:
exec("_I.%s='%s'" % (i, args.get(i)))
def __setattr__(self,
name, value):
global clumns, _I
print 'set key:%s value:%s ...' % (name,
value)
if name not in clumns: return
print 'set key:%s value:%s ...' % (name,
value)
if name == 'id':
exec("_I.%s = %s" % (name, value))
def
__getattribute__(self, name):
global clumns, _I
print 'get key:%s' % name
if name not in clumns: return
exec('value = _I.%s' % name)
print 'get key:%s value:%s
...' % (name, value)
return value
class J(object):
def __init__(self,
**args):
global clumns
clumns = ['id', 'name']
#self.clumns.append('clumns')
for i in clumns:
exec("self._%s='%s'" % (i, args.get(i)))
def __setattr__(self,
name, value):
global clumns
name = name[1:]
print 'set key:%s value:%s ...' % (name,
value)
if name not in clumns:
print
'Error:'
return
print 'set key:%s value:%s ...' % (name,
value)
if name == 'id':
s =
"self._%s = %s" % (name, value)
print
s
exec(s)
def __getattr__(self,
name):
global clumns
print 'get key:%s' % name
if name == 'clumns':
return
clumns
if name not in clumns: return
s = 'value = self._%s' % name
print s
exec(s)
return value
#__getattribute__() -- >
Descriptor.__get__() -- > __dict__
-- > readonly Descriptor.__get__()
-- > __getattr__()
#__setattr__() -- > Descriptor.__set__()
-- > __dict__
#__delattr__() -- >
Descriptor.__delete__() -- > __dict__
class K(object):
def __init__(self,
**args):
clumns = ['id', 'name']
super(K, self).__setattr__("clumns",
clumns)
#self.clumns.append('clumns')
for i in clumns:
value =
args.get(i, None)
super(K,
self).__setattr__("_" + i, value)
def __setattr__(self,
name, value):
clumns = super(K,
self).__getattribute__("clumns")
#name = name[1:]
print 'set key:%s value:%s ...' % (name,
value)
if name not in clumns:
print
'Error:'
return
print 'set key:%s value:%s ...' % (name,
value)
if name == 'id':
super(K,
self).__setattr__("_" + name, value)
return
def __getattr__(self,
name):
clumns = super(K,
self).__getattribute__("clumns")
print 'get key:%s' % name
if name == 'clumns':
return
clumns
if name not in clumns: return
s = 'value = self._%s' % name
# maximum recursion depth exceeded ??? why
not??
# if this method is __getattribute__ , result is
None...
print s
exec(s)
return value
class L(object):
def __init__(self,
**args):
clumns = ['id', 'name']
super(L, self).__setattr__("clumns",
clumns)
#self.clumns.append('clumns')
for i in clumns:
value =
args.get(i, None)
super(K,
self).__setattr__("_" + i, value)
#first:__getsttrbute__ get "__class__", return None
#TypeError: super(type, obj): obj must be an instance or subtype of
type
def __setattr__(self,
name, value):
clumns = super(L,
self).__getattribute__("clumns")
#name = name[1:]
print 'set key:%s value:%s ...' % (name,
value)
if name not in clumns:
print
'Error:'
return
print 'set key:%s value:%s ...' % (name,
value)
if name == 'id':
super(L,
self).__setattr__("_" + name, value)
return
def
__getattribute__(self, name):
clumns = super(L,
self).__getattribute__("clumns")
print 'get key:%s' % name
if name == 'clumns':
return
clumns
if name not in clumns: return
s = 'value = self._%s' % name
# maximum recursion depth exceeded ??? why
not??
print s
exec(s)
return value
class M(object):
def __init__(self,
**args):
clumns = ['id', 'name']
super(M, self).__setattr__("clumns",
clumns)
#self.clumns.append('clumns')
for i in clumns:
value =
args.get(i, None)
super(M,
self).__setattr__("_" + i, value)
def __setattr__(self,
name, value):
clumns = super(M,
self).__getattribute__("clumns")
#name = name[1:]
print 'set key:%s value:%s ...' % (name,
value)
if name not in clumns:
print
'Error:'
return
print 'set key:%s value:%s ...' % (name,
value)
if name == 'id':
super(M,
self).__setattr__("_" + name, value)
return
def __getattr__(self,
name):
clumns = super(M,
self).__getattribute__("clumns")
print 'get key:' + name,
if name == 'clumns':
print
clumns
return
clumns
if name not in clumns:
print
"Key:%s not in clumns:%s" % (name, clumns)
return
value = super(M, self).__getattribute__("_" +
name)
print " Value:%s" % value
return value