继承

属性控制

1 .注意的第一点:get,set及获取者或设置者使用同样的名称,对其区分的是装饰器,装饰器会适当的重名民,从而避免发生冲突
2 .获取 count(self)
3 .设置 count(self,value)
4 .动态语言的鸭子类型:不需要严格的继承体系,只要有相同的方法,就可以看成是继承过来的。
5 .所有的对象都具有python自动提供的某些特殊方法,比如class,实际上是一个对象类的对象引用,还有name属性,表示类名。

继承init函数

1 .init函数里面可以加上默认值
2 .我们需要的是子类定义自己的初始化函数,在子类中显示调用父类,子类和父类的舒心哥都会被初始化
3 .情况1:如果子类定义了自己的初始化函数,而在子类中没有显示的调用父类的初始化函数,则父类的属性不会被初始化
4 .情况2:如果子类没有定于i自己的初始化函数,父类的初始化函数会被默认调用;但是如果要实例化子类的对象,则只是传入父类的初始化函数对应的参数

super

1 .super(子类,self).init(参数1,参数2)
2 .父类.init(self,参数1,参数2)

多态

1 .子类和父类都存在相同的方法的时候,子类的方法就会覆盖父类的方法,在代码云心改的时候,总是会调用子类的run方法
2 .

定制类

1 .len()方法是为了让class作用于len()函数,除此之外还有一些其他的类可以让我们定制特殊的类
2 .str()返回用户看到的字符串
3 .repr()返回程序开发者看到的字符串,其实和上面的差不多
4 .iter()如果想让一个类被用于for...in循环,类似list或者tuple那样,就必须实现一个iter()方法该方法返回一个迭代对象,然后for循环就会不断调用改迭代对象的下一个方法next()拿到循环的下一个值,直到遇到StopIteration错误时退出循环
class Fib(object):
def init(self):
self.a, self.b = 0, 1 # 初始化两个计数器a,b

def __iter__(self):
    return self # 实例本身就是迭代对象,故返回自己

def __next__(self):
    self.a, self.b = self.b, self.a + self.b # 计算下一个值
    if self.a > 100000: # 退出循环的条件
        raise StopIteration()
    return self.a # 返回下一个值

5 .getitem(self,n):索引下标取出元素:还可以对传入的n做判断,比如是不是切片类型 if isinstance(n,slice):
6 .getattr():访问一个类的属性,可以返回默认值或者是一个函数(返回函数的时候需要加上括号来调用)
7 .

比较的特殊方法

1 .lt(self,other):x 2 .le(self,other):x<=y
3 .eq(self,other):x==y
4 . ...

基本的特殊方法

1 .bool(self):bool(x)
2 .format(self,format_spec):为自定义的类提供str.format支持
3 .hash(self):如果提供,那么x可用做字典的键或存放在集合中
4 .init(self,args):对象初始化的时候调用
5 .new(cls,args):创建对象的时候调用
6 .repr(self):返回x的字符串表示
7 .str():返回x适合阅读的字符串表示形式

数值型与逻辑运算的特殊方法

1 .一般情况下,我们是不会重写del()方法的。这个方法是不能用于释放资源,例如关闭文件,断开网络连接,断开数据库连接。正确的资源释放方式是使用try...finally ,另一种是将上下文对象和with一起使用

你可能感兴趣的:(继承)