class Bird:
def __init__(self): #注意别把构造方法写错了,__ 不是 _
self.hungry = True
def eat(self):
if self.hungry:
print 'Aaah...'
self.hungry = False
else:
print 'No,thanks'
#直接调用类的方法
class SongBird(Bird):
def __init__(self):
Bird.__init__(self) #直接调用类的方法,没有实例会被绑定,就可自由地提供须要的self参数,这样的方法称为未绑定方法
self.sound = 'Squawk!'
def sing(self):
print self.sound
sb = SongBird()
sb.sing()
sb.eat()
sb.eat()
#使用super调用父类
__metaclass__= type #super 函数只在新式类中起做用
class SongBird(Bird):
def __init__(self):
super(SongBird,self).__init__() #注意格式
self.sound = 'Squwk!'
def sing(self):
print self.sound
sb = SongBird()
sb.sing()
sb.eat()
sb.eat()
序列和映射是对象的集合
该方法返回集合中所含项目的数量。对于序列来讲,这就是元素的个数,对于映射来讲,则是键-值对的数量,若是__len__返回0(而且没有实现重写该行为的__nonzero__),对象会被当作布尔变量中的假值(空的列表、元祖、字符串额字典同样)进行处理
该方法返回与键对应的值,对一个序列,键应该是一个 0 ~ n-1的整数(或者像后面所说的负数),n 是序列的长度,对于映射来讲,能够使用任何种类的键
该方法应该按照必定的方式存储和key相关的value,该值随后可以使用 __getitem__来获取,固然,只能为能够修改的对象定义这个方法
该方法在对一个部分对象使用 del 语句时被调用,同时必须删除和键相关的键,这方法可修改的对象定义的(并非删除所有的对象,而只删除一些须要移除的元素)
a、对于一个序列来讲,若是键是负整数,那么要从末尾开始计数。换句话说就是 x[-n] 和 x[len(x) - n]是同样的
b、若是键是不合适的类型(例如,对于序列使用字符串做为键),会引起一个 TypeError 异常
c、若是序列的索引是正确的类型,但超出一个范围,应该引起一个 IndexError异常