澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

python面向对象编制程序,面向对象进级

2019-06-08 作者:www.8455.com   |   浏览(130)

 

python面向对象编程,

 

Python-面向对象进级,python-进级

一、isinstance(obj, cls) and issubclass(sub, super)

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

1 class A:
2     pass
3 
4 obj = A()
5 print(isinstance(obj, A))
6 
7 #运行结果
8 #True

二. issubclass(sub, super),检查sub类是或不是是super类的派生类(子类)

 1 class A:
 2     pass
 3 
 4 class B(A):
 5     pass
 6 
 7 print(issubclass(B, A))
 8 
 9 #运行结果
10 #True

二、反射

一. 怎样是反光

反射的定义是由Smith在1981年第3次提议的,重若是指程序能够访问、检查评定和修改它本身情状或行为的一种力量(自省)。这一概念的提议高效引发了微型Computer科学领域有关使用反射性的研商。它首先被程序语言的安排性领域所运用,并在Lisp和面向对象方面获取了战表。

二. python面向对象中的反射:经过字符串的样式操作对象相关的习性。python中的一切事物都是目的(都得以选用反射)。

图片 1

 1 class People:
 2     country = 'China'
 3     def __init__(self, name, age):
 4         self.name = name
 5         self.age = age
 6 
 7     def info(self):
 8         print('%s is %d years old' % (self.name, self.age))
 9 
10 p = People('jack', 18)
11 
12 #hasattr(obj, name),检查属性
13 print(hasattr(p, 'info'))   #检查对象p是否有‘info’属性,结果True
14 print(hasattr(p, 'name'))   #检查对象p是否有‘name’属性,结果True
15 
16 #getattr(obj, name)获取属性
17 print(getattr(p, 'name'))   #获得对象p的‘name’属性,结果:返回p.name的值,即jack
18 print(getattr(p, 'info'))   #获得对象p的‘info’属性,结果:返回p.info的值,
19                             # 即绑定方法info的内存地址:<bound method People.info of <__main__.People object at 0x000001B64317ABE0>>
20 getattr(p, 'info')()        #由于getattr返回的是对象方法属性的内存地址,加()就可以调用,结果:jack is 18 years old
21 
22 #setattr(x, y, v)设置属性
23 setattr(p, 'age', 21)       #修改对象p的‘age’属性,结果:p.age的值变为21
24 setattr(p, 'sex', 'male')   #新增对象p的‘sex’属性,结果:p.sex的值为male
25 print(p.__dict__)           #查看对象p的数据属性,结果:{'name': 'jack', 'age': 21, 'sex': 'male'}
26 
27 #delattr(x, y)删除属性
28 delattr(p, 'sex')           #删除对象p的‘sex’属性
29 print(p.__dict__)           #结果:{'name': 'jack', 'age': 21}

八个能够兑现自省的函数:hasattr(obj, name);getattr(obj, name);setattr(x, y, v);delattr(x, y) 图片 2

 1 #类也是对象
 2 class Foo(object):
 3     staticField = "old boy"
 4 
 5     def __init__(self):
 6         self.name = 'wupeiqi'
 7 
 8     def func(self):
 9         return 'func'
10 
11     @staticmethod
12     def bar():
13         return 'bar'
14 
15 
16 print(getattr(Foo, 'staticField'))  #获取类的'staticField'属性,结果:old boy
17 
18 print(getattr(Foo, 'func'))         #获取类的'func'属性,结果:<function Foo.func at 0x0000018156FBB950>
19 print(getattr(Foo, 'func')('self'))     #加()调用方法,结果:func
20 
21 print(getattr(Foo, 'bar'))          #获取类的'bar'属性,结果:<function Foo.bar at 0x00000192D2AFB9D8>
22 print(getattr(Foo, 'bar')())        #加()调用方法,结果:bar

类也是指标,能够使用反射 图片 3

 1 #反射当前模块成员
 2 #!/usr/bin/env python
 3 # -*- coding:utf-8 -*-
 4 
 5 import sys
 6 
 7 
 8 def s1():
 9     print('s1')
10 
11 
12 def s2():
13     print('s2')
14 
15 
16 this_module = sys.modules[__name__]
17 
18 print(this_module)                      #结果:<module '__main__' from '......'>
19 print(hasattr(this_module, 's1'))       #结果:True
20 print(getattr(this_module, 's2'))       #结果:<function s2 at 0x0000020590EAB8C8>
21 getattr(this_module, 's2')()            #结果:s2

模块也是目的,能够运用反射

三. 反光的益处

获益1:实现可插拔机制

有俩技士,三个lili,1个是egon,lili在写程序的时候须要用到egon所写的类,可是egon去跟女朋友度蜜月去了,还尚无水到渠成她写的类,lili想到了反光,使用了反光机制lili能够接二连三完结本身的代码,等egon度蜜月归来后再持续形成类的定义并且去贯彻lili想要的功效。

简单来讲反射的功利正是,能够预先定义好接口,接口唯有在被成功后才会真正实践,那贯彻了即插即用,那实则是1种‘早先时期绑定’,什么看头?即你能够预先把第一的逻辑写好(只定义接口),然后前期再去贯彻接口的成效。

 1 class FtpClient:
 2     'ftp客户端,但是还么有实现具体的功能'
 3     def __init__(self,addr):
 4         print('正在连接服务器[%s]'  
		

本文由澳门新萄京官方网站发布于www.8455.com,转载请注明出处:python面向对象编制程序,面向对象进级

关键词: