构造函数、super

  • 构造函数、super
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__(self):
该方法返回集合中所含项目的数量。对于序列来讲,这就是元素的个数,对于映射来讲,则是键-值对的数量,若是__len__返回0(而且没有实现重写该行为的__nonzero__),对象会被当作布尔变量中的假值(空的列表、元祖、字符串额字典同样)进行处理

  • __getitem__(self.key):
该方法返回与键对应的值,对一个序列,键应该是一个 0 ~ n-1的整数(或者像后面所说的负数),n 是序列的长度,对于映射来讲,能够使用任何种类的键

  • __setitem__(self,key):
该方法应该按照必定的方式存储和key相关的value,该值随后可以使用 __getitem__来获取,固然,只能为能够修改的对象定义这个方法

  • __delitem__(self,key):
该方法在对一个部分对象使用 del 语句时被调用,同时必须删除和键相关的键,这方法可修改的对象定义的(并非删除所有的对象,而只删除一些须要移除的元素)

  • 对这些方法的附加要求
a、对于一个序列来讲,若是键是负整数,那么要从末尾开始计数。换句话说就是 x[-n] 和 x[len(x) - n]是同样的
b、若是键是不合适的类型(例如,对于序列使用字符串做为键),会引起一个 TypeError 异常
c、若是序列的索引是正确的类型,但超出一个范围,应该引起一个 IndexError异常
相关文章
相关标签/搜索