版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一:鸭子类型
鸭子类型是一个在强类型语言中使用,python崇尚“鸭子类型”
多态:定义是与使用时不一样就称为多肽
class cat(object):
def __init__(self):
print("I'm cat")
class dog(object):
def __init__(self):
print("I'm dog")
class duck(object):
def __init__(self):
print("I'm duck")
animal_list = [cat,dog,duck]
for i in animal_list:
i()
二:抽象基类(abc模块)
看连接官方文档
通俗来说:只提供接口,不做实现的类
import requests
from collections.abc import Sized
class dome():
def __init__(self,elist):
self.elist = elist
def __len__(self):
return len(self.elist)
l = dome(["12345","ashfkj"])
print(len(l))
#查看自定义函数有哪些属性
#检查是否有该方法
#print(hasattr(dome,'__len__'))
print(isinstance(dome,Sized))
#强制子类必须实现每一方法
import abc
class Cachebase(metaclass=abc.ABCMeta):
@abc.abstractmethod
def get(self,key):
pass
@abc.abstractmethod
def set(self, key):
pass
class a(Cachebase):
def get(self, key):
pass
def set(self, key):
pass
m = a()
三:类属性与实例化属性
class A:
#类属性
a = 1
#实例化属性
def __init__(self,x,y):
self.x=x
self.y=y
深入对象与类
(1):mro算法,深度优先
(2):bfs算法,广度优先
(3):c3算法,现在在使用
class A:
pass
class B(A):
pass
class C(A):
pass
class D(B,C):
pass
print(D.__mro__)
四:自省机制
自省是通过一定的机制查询到对象的内部结构
Python中提供了很多的方法来查询对象的内部结构,比如:
hasattr:查询对象是否有一个特性的属性
getattr:获取对象的属性
setattr:设置对象的属性
delattr:从一个对象中删除属性
super
# 调用上一个继承函数方法
class A:
def __init__(self):
print('a')
class B(A):
def __init__(self):
print('B')
class C(B):
def __init__(self):
super(B,self).__init__()#按照mro算法调用
if __name__ == '__main__':
c = C()
super().init()#按照mro算法调用,默认为上一级的调用
我想要一个元组大于0实数
class Inttuple(tuple):
def __new__(cls,iterable):
f = (i for i in iterable if isinstance(i, int) and i > 0)
return super(Inttuple, cls).__new__(cls, f)
a = Inttuple([1,2,"ahdja"])
print(a)