博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python全栈开发——面向对象进阶(一切皆对象)
阅读量:5064 次
发布时间:2019-06-12

本文共 2953 字,大约阅读时间需要 9 分钟。

1.isinstance(obj,cls)            检查obj是否是类cls的对象

issubclass(sub,super)          检查sub是否是super的子类

#isinstance(obj,cls)  检查obj是否是类cls的对象class Foo:    passf=Foo()print(isinstance(f,Foo))    #True#issubclass(sub,super)  检查sub是否是super的子类class Bar(Foo):    passprint(issubclass(Bar,Foo))   #Ture

2.反射(常用于可插拔方式)

3.__setattr__,__getattr__,__delattr__

4.二次加工标准类型(包装)

5.__getattribute__

class Foo:    def __init__(self,y):        self.y=y    #有__getattribute__,则__getattr__不会触发    #实际上只有触发AttributeError时,才会触发    def __getattr__(self, item):        print('getattr')    #实例化访问时,不管存不存在属性,都会调用    def __getattribute__(self, item):        print('getattribute')f=Foo(3)f.c       #  getattributef.y       #  getattribute

6.描述符(__get__,__set__,__delete__)

7.再看property

8.__setitem__,__getitem__,__delitem__

#通过字典形式访问才会触发,和内置attr差不多class Foo:    def __getitem__(self, item):        print('getitem')    def __setitem__(self, key, value):        print('setitem')        self.__dict__[key]=value    def __delitem__(self, key):        print('delitem')f=Foo()f['l']='k'    #setitemprint(f.__dict__)  #{'l': 'k'}f['l']        #getitemdel f['ff']   #delitem

9.__str__,__repr__,__format__  

#__repr__,__str__ 控制对象的显示方式,一定有返回值,且为字符串形式 # print的原理就是输出___str__的信息,若找不到,用__repr__代替
class Foo:    def __str__(self):        return 'str'    def __repr__(self):        return 'repr'x=Foo()print(x)    #str

#__format__

x='{0}-{0}-{0}'.format('d')print(x)   #d-d-dDate_geshi={    'ymd':'{0.year}-{0.month}-{0.day}',    'ydm':'{0.year}-{0.day}-{0.month}',    'mdy':'{0.month}-{0.day}-{0.year}',}class Date:    def __init__(self,year,month,day):        self.year=year        self.month=month        self.day=day    #定制格式    def __format__(self, format_spec='ymd'):        if format_spec not in Date_geshi:            print('没有该格式')            format_spec = 'ymd'        print(format_spec)   #  ymd        return Date_geshi[format_spec].format(self)d=Date(2016,12,23)d1=d.__format__('hgfh')print(d1)    #  2016-12-23print(format(d,'mdy'))   #相当于执行  d.__format__('mdy')#  12-23-2016

10.__slots__(如果一个属性很少的类,但是有很多 实例,为了节省内存,可以使用__slots__取代实例的__dict__)

class Foo:     #设置之后,class没有__dict__属性了    #也限制了创建,只能定义你定义的属性    #只能定义__slots__提供的name,age    __slots__ = ['name','age']f=Foo()f.name=13

11.__doc__(打印类文档)

12.__module__    表示当前操作的对象在哪个模块

 __class__           表示当前操作的对像是哪个类   

13.__del__析构方法

14__call__对象后面加括号,触发执行

class Foo:    def __call__(self,*args,**kwargs):        print('__call__')f=Foo()f()     #__call__

15__next__,__iter__(迭代器协议) 

class FBIF:    def __init__(self,_a,_b):        self.__a=_a        self.__b=_b    def __iter__(self):        return self    def __next__(self):        self.__a,self.__b=self.__b,self.__b+self.__a        return self.__af=FBIF(1,1)print(next(f))print(next(f))print('---------------->')for i in f:    print(i)    if i>100:        raise StopIteration('ffff')

 16.__enter__,__exit__(被称为上下文管理协议)

with 的工作原理,实际上先调用__enter__,在结束时调用__exit__扫尾

转载于:https://www.cnblogs.com/lujiacheng-Python/p/9739314.html

你可能感兴趣的文章
卸载 linux http
查看>>
log4j2 使用
查看>>
MFC的两个问题
查看>>
我想在 2012 储备的技术
查看>>
利用WindowsPhone7_SDK_Full.rar_for_xp,在xp下安装sdk,部署xap软件的教程
查看>>
那些我希望在一开始使用 Zsh(oh-my-zsh) 时就知道的
查看>>
macos port总结
查看>>
C/C++内存分配
查看>>
TCP的三次握手(建立连接)和四次挥手(关闭连接)
查看>>
[SDOI2017]数字表格
查看>>
某考试 T3 C
查看>>
AtCoder - 3939 Strange Nim
查看>>
asp.net mvc 接入阿里大于 短信验证码发送
查看>>
钟国晨160809323 (作业9)
查看>>
简单购物放大镜分享
查看>>
ROS学习(九)—— rqt_console 和 roslaunch
查看>>
梯度下降
查看>>
Android FileUtil(android文件工具类)
查看>>
C# Datatable排序与取前几行数据
查看>>
别指望在NativeWindow里添加Flex组件
查看>>