博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python之路,Day7 - 面向对象编程进阶
阅读量:6294 次
发布时间:2019-06-22

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

一、isinstanse(obj,cls)和issubclass(sub,class)

  判断obj是否是类cls的对象

  判断sub是否是类class的子类

二、反射

  1.定义:程序可以访问、检查、修改它本身状态和行为的一种能力

  2.python中一切皆是对象, 以下方法适用类和对象

1 class Person(): 2     def __init__(self,name,age): 3         self.name = name 4         self.age = age 5  6 class Student(Person): 7     def __init__(self,name,age): 8         super(Student,self).__init__(name,age) 9 10     def study():11         return 'studying'12 13     @staticmethod14     def exam():15         return 'examing'16 17 s =Student('sam',12)18 19 #查询类中是否有此属性20 print(hasattr(s,'age'))21 22 #获取属性对应的参数23 print(getattr(s,'age'))24 25 #新增属性26 setattr(s,'sex','male')27 print(s.__dict__)28 #结果{'name': 'sam', 'age': 12, 'sex': 'male'}29 print(hasattr(s,'sex'))  #True30 print(getattr(s,'sex'))  #'male'31 32 #删除属性33 delattr(s,'age')34 print(s.__dict__)35 #结果{'name': 'sam', 'sex': 'male'}36 37 #一切皆对象,类可以同样的操作38 print(hasattr(s,'age'))   #True 39 print(Student,'staticmethod')  #True40 print(getattr(Student,'exam')())  #examing41 42 setattr(Student,'sex','male')43 print(Student.__dict__)44 #结果{.....'sex': 'male'}45 46 print(delattr(Student,'study'))
实例

    3.反射的好处:实现即插即用,事先把主要逻辑写好,只定义接口,后期再完善接口的功能

1 class part(): 2     def start(self): 3         print('代码已写完....') 4  5 class all(): 6     def keepgo(self): 7         if hasattr(part,'start'): 8             print('keepgo') 9         else:10             exit('功能未实现')
即插即用

      4.动态导入模块

   

三、自定義屬性方法

__setattr__,__delattr__,__getattr__

四、__getattribute__

#当__getattribute__与__getattr__同时存在,只会执行__getattrbute__,除非__getattribute__在执行过程中抛出异常AttributeError
1 class Foo: 2     def __init__(self,x): 3         self.x=x 4  5     def __getattribute__(self, item): 6         print('不管是否存在,我都会执行') 7  8 f1=Foo(10) 9 f1.x10 f1.xxxxxx
View Code

五、__setitem__,__getitem,__delitem__

1 class Foo(object): 2     def __getitem__(self, item): 3         print('__getitem__',item) 4  5     def __setitem__(self, key, value): 6         print('__setitem__',key,value) 7  8     def __delitem__(self, key): 9         print('__delitem__',key)10 11 obj = Foo()12 result =obj['k1']13 obj['k2']='sam'14 del obj['k1']15 print(obj.__dict__)16 17 #执行结果18 __getitem__ k119 __setitem__ k2 sam20 __delitem__ k121 {}
View Code

六、__module__和__class__

       分别表示:当前操作在哪个模块、哪个类

七、__call__

  方法的执行是对象后面加(),或类后面加()()

断言:检查前面是否正确

 

转载于:https://www.cnblogs.com/pynetwork/p/9102981.html

你可能感兴趣的文章
LNMP(php-fpm的pool,慢执行日志,定义open_bashdir,php-fpm进程管理
查看>>
Flask rst 文档转换为html格式文件
查看>>
python 安装第三方库pygame
查看>>
Linux下的grep命令详解
查看>>
磁盘系统管理
查看>>
Linux下ftp+ssl实现ftps
查看>>
JavaScript基础
查看>>
Nginx之反向代理与负载均衡实现动静分离实战
查看>>
Object类型转换为long或者Long
查看>>
16位流应用与代码统计器例题
查看>>
linux内核中符号地址的获取
查看>>
内存对齐的问题
查看>>
分析动态代理给Spring事务埋下的坑
查看>>
从不用 try-catch 实现的 async/await 语法说错误处理
查看>>
Zabbix Python API 应用实战
查看>>
DC学院学习笔记(六):数据库和SQL语言简述
查看>>
系统自动登录及盘符无法双击打开问题处理
查看>>
IE11下载文件时出现文件名乱码
查看>>
修行的心态,积极的态度
查看>>
网络服务搭建、配置与管理大全(Windows版)
查看>>