代码如下:
#encoding=utf-8
class Behave(object):
def __init__(self,name):
self.name=name
def once(self):
print 'Hello', self.name
def rename(self,NewName):
self.name = NewName
def repeat(self,N):
for i in range(N):
self.once()
class Repeater(object):
def repeat(self,N):
print N*'---------'
Mixobj = Behave('John'),Behave('Lucy'),Repeater()
for obj in Mixobj:
obj.repeat(3)
class SubClass(Behave):
def once(self):
print 'sub class,',self.name
subobj=SubClass('gray')
subobj.repeat(3)
class OneMore(Behave):
def repeat(self,N):
Behave.repeat(self, N)
super(OneMore,self).repeat(N)
print '-------------show --super'
oneMoreObj=OneMore('onemore')
oneMoreObj.repeat(1)
#温度标示的转换
print '中国'
#核心利用get和set的默认读取和访问一个属性值,在内部已经设定好了对应维度的变量,获取的时候,只用计算就可以了
class Temperature(object):
coefficients = {'c':(1.0,0.0,-273.15),
'f':(1.8,-273.15,32.0),
'r':(1.8,0.0,0.0)}
def __init__(self,**kwargs):
try:
name,value=kwargs.popitem()
except KeyError:
name, value='k',0
if kwargs or name not in 'kcfr':
kwargs[name]=value
raise TypeError,'invalid argumens %r' % kwargs
setattr(self,name,float(value))
def __getattr__(self,name):
try:
eq= self.coefficients[name]
except KeyError:
raise AttributeError, name
return (self.k + eq[1]) * eq[0] + eq[2]
def __setattr__(self, name, value):
if name in self.coefficients:
eq = self.coefficients[name]
self.k = (value - eq[2]) / eq[0] - eq[1]
elif name == 'k':
object.__setattr__(self, name, value)
else:
raise AttributeError, name
def __str__(self):
return "%s K" % self.k
def __repr__(self):
return "Temperature(k=%r)" % self.k
print Temperature(f=70).c
Temperature(f=70)
打印结果如下:
Hello John
Hello John
Hello John
Hello Lucy
Hello Lucy
Hello Lucy
---------------------------
sub class, gray
sub class, gray
sub class, gray
-------------show --super
Hello onemore
Hello onemore
中国
21.1111111111