乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
python 2.03 面向对象
2017-01-31 12:04:12
73
0
0
admin
> 面向对象 **注意** python 创建对象分为新版本的对象和旧版本的对象,旧版本的对象保留是为了向上兼容,一般情况下都可以直接使用新版本的对象。 创建新版本的对象的方式是在对象前几行写上 ``` __metaclass__ = type #以type 作为元类,具体解释比较复杂,以后再写 ``` *** #类的属性和方法 ##类的私有变量和方法 所有用__开头的变量或者方法都是私有变量和方法,不过还是可以通过其它的名字访问 *事实上,只是把所有双下划线开头的名字前面加上了单下划线加类名而已* ##类变量/实例变量 类变量在类中公用,用 类名.变量名 调用 实例变量只属于这个实例,用 实例名.变量名 或者 self.变量名 调用 ##一些内置属性 (class 指类,object 指实例) ``` class.__dict__ 类的属性 class.__name__ 类名 object.__dict__ 实例的属性 class.__doc__ 类的介绍文档,在定义类的开头定义的 class.__module__ 类定义所在的模块 class.__bases__ 类的所有父类 object.__class__ 实例的类 object.__class__.__name__ 实例的类名 ``` ##一些类内部的保留方法 ``` __init__ 初始化类的方法(构造方法) __del__ 类在被销毁时会调用的方法 ``` ##一些方法 ``` hasattr(object, name) 返回布尔值,看一个对象中是否有某一个属性 getattr(object, name[,default]) 获取对象的某个属性,如果不存在,返回默认值。如果获取的是方法,返回的则是该方法的内存地址,如果后面再加一对括号就是调用它。 setattr(object, name, values) 修改对象的属性 issubclass(child_class,bases_class) 返回布尔值,bases_class 是不是child_class 的父类 isinstance(object, class) object 是不是class的实例对象或者class子类的实例对象 super(自己的类名,self) 找到父类,只能用于新版本的类,可以在调用父类方法时使用 ``` ##例子 **code** ``` #!/usr/bin/python class team: 'read me' # 这一行会作为__doc__ company_name="xx" #类变量 def __init__(self,name,team_id="100"): #初始化方法 self.team_name = name self.__team_id = team_id #__私有变量 def set_name(self,name): self.team_name = name def get_name(self): return self.team_name def set_company_name(self,name): team.company_name = name def get_company_name(self): return team.company_name def __del__(self): #会在销毁类的时候被调用 print "del:" + self.__class__.__name__ + ':' + self.team_name class employee(team): #team 的子类 def __init__(self,team_name,name): self.team_name = team_name self.name = name def set_team_name(self,name): team.set_name(self,name) #调用父类方法的方式 #super(employee,self).set_name(name) #如果是新版本的类的话可以这样写 def get_team_name(self): return self.team_name sa = team("sa") network = team("network") print """ Show the Class ===========================================================""" print "team.__dict__:",team.__dict__ print "team.__doc__:",team.__doc__ print "team.__module__:",team.__module__ print "team.__bases__:",team.__bases__ print "employee.__bases__:",employee.__bases__ print "team.__name__:",team.__name__ print "sa.__dict__:",sa.__dict__ print "vars(sa)",vars(sa) print "sa.__class__:",sa.__class__ print "sa.__class__.__name__:",sa.__class__.__name__ print "sa.team_name:" + sa.team_name print "sa._team__team_id:" + sa._team__team_id #访问私有变量,还不够私有。。。。。嗯 print 'hasattr(sa,"team_name"):',hasattr(sa,"team_name") print 'setattr(sa,"xx","xx"):',setattr(sa,"hahaha","wawawa") print 'after set attr:',sa.__dict__ print 'getattr(sa,"team_name"):',getattr(sa,"get_name") print 'getattr(sa,"team_name")():',getattr(sa,"get_name")() #直接调用该方法 print """ using class function ===========================================================""" print "sa team name:"+sa.get_name() print "sa compant name:"+sa.get_company_name() sa.set_name("dba") print "sa set name to dba" print "sa team name:"+sa.get_name() print "compant name:"+network.get_company_name() sa.set_company_name("abcd") print "sa set company name to abcd" print "network team company name:"+network.get_company_name() print """ SUB class: ===========================================================""" leo = employee("sa","leo") print "leo team name" + leo.get_team_name() print "leo set team name to abc" leo.set_team_name("abc") print "leo team name" + leo.get_team_name() print "employee is sub class of team :",issubclass(employee,team) print "sa is object from Class employee:",isinstance(sa,employee) print "sa is object from Class team:",isinstance(sa,team) print """ Script end, auto delete the object: ===========================================================""" ``` **运行结果** ``` [root@hadoop1 python]# ./oo.py Show the Class =========================================================== team.__dict__: {'set_name': <function set_name at 0x7f30518f25f0>, 'set_company_name': <function set_company_name at 0x7f30518f26e0>, '__del__': <function __del__ at 0x7f30518f27d0>, 'get_company_name': <function get_company_name at 0x7f30518f2758>, '__module__': '__main__', 'get_name': <function get_name at 0x7f30518f2668>, 'company_name': 'xx', '__doc__': 'read me', '__init__': <function __init__ at 0x7f30518f2578>} team.__doc__: read me team.__module__: __main__ team.__bases__: () employee.__bases__: (<class __main__.team at 0x7f30518e7890>,) team.__name__: team sa.__dict__: {'team_name': 'sa', '_team__team_id': '100'} vars(sa) {'team_name': 'sa', '_team__team_id': '100'} sa.__class__: __main__.team sa.__class__.__name__: team sa.team_name:sa sa._team__team_id:100 hasattr(sa,"team_name"): True setattr(sa,"xx","xx"): None after set attr: {'team_name': 'sa', '_team__team_id': '100', 'hahaha': 'wawawa'} getattr(sa,"team_name"): <bound method team.get_name of <__main__.team instance at 0x7f30518faa70>> getattr(sa,"team_name")(): sa using class function =========================================================== sa team name:sa sa compant name:xx sa set name to dba sa team name:dba compant name:xx sa set company name to abcd network team company name:abcd SUB class: =========================================================== leo team namesa leo set team name to abc leo team nameabc employee is sub class of team : True sa is object from Class employee: False sa is object from Class team: True Script end, auto delete the object: =========================================================== del:team:network del:team:dba del:employee:abc ```
上一篇:
python 2.01 异常处理
下一篇:
python 2.04 迭代器和生成器
文档导航