Python面向对象进阶及类成员
再次了解多继承
先来一段代码
#!/usr/bin/env python# _*_ coding:utf-8 _*_class A:def bar(self):print("BAR")self.f1()class B(A):def f1(self):print("B")class C:def f1(self):print("C")class D(C, B):passobj = D()obj.bar()
执行结果
/usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day03/s1.pyBARCProcess finished with exit code 0
流程释意:
创建了类A、B、C、D;
D继承了C和B,B继承了A,D内什么都不做,pass;创建一个对象
obj,类是D,当执行D的bar方法的时候会先从C里面寻找有没有bar方法;C内没有bar方法,然后继续从B里面查找,B里面也没有,B的父类是A,A里面有bar方法,所以就执行了A的bar方法;A的bar方法首先输出了BAR;然后又执行了
self.f1(),self=obj,相当于执行了obj.f1();执行
obj.f1()的时候先从C里面查找有没有f1这个方法,C里面又f1这个方法;最后就执行
C里面的f1方法了,输出了C
执行父类的构造方法
lass Annimal:def __init__(self):print("Annimal的构造方法")self.ty = "动物"class Cat(Annimal):def __init__(self):print("Cat的构造方法")self.n = "猫"# 寻找Cat类的父类,然后执行父类的构造方法super(Cat, self).__init__()mao = Cat()print(mao.__dict__)
执行结果
/usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day03/s1.pyCat的构造方法Annimal的构造方法{'ty': '动物', 'n': '猫'}Process finished with exit code 0
先执行了Cat的构造方法,然后又执行了Annimal的构造方法。
第二种执行父类的方法如下:
Annimal.__init__(self)
不推荐使用
利用反射查看面向对象成员归属
#!/usr/bin/env python# _*_ coding:utf-8 _*_class Foo:def __init__(self, name):self.name = namedef show(self):print('show')obj = Foo("as")# 如果是类,就只能找到类里的成员print(hasattr(Foo, "show"))# 如果是对象,既可以找到对象,也可以找类里的成员print(hasattr(obj, "name"))print(hasattr(obj, "show"))
执行结果
/usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day03/s2.pyTrueTrueTrueProcess finished with exit code 0
利用反射导入模块、查找类、创建对象、查找对象中的字段
s1脚本文件内容:
#!/usr/bin/env python# _*_coding:utf-8 _*_# 导入模块m = __import__('s2', fromlist=True)# 去模块中找类class_name = getattr(m, "Foo")# 根据类创建对象obj = class_name("ansheng")# 去对象中找name对应的值print(getattr(obj, 'name')
s2脚本文件内容
#!/usr/bin/env python# _*_coding:utf-8 _*_class Foo:def __init__(self, name):# 普通字段,保存在对象中self.name = name
执行结果
/usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s1.pyanshengProcess finished with exit code 0
面向对象类成员之静态字段
静态字段存在类中,如下:
#!/usr/bin/env python# _*_coding:utf-8 _*_# 静态字段存在的意义就是将每个对象中重复的东西在类里面保存一份即可,这就是静态字段class Provice:# 静态字段contry = "China"def __init__(self, name):self.name = namedef show(self):print(Provice.contry, self.name)hebei = Provice("河北")hebei.show()hubei = Provice("湖北")hubei.show()
执行结果
/usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s2.pyChina 河北China 湖北Process finished with exit code 0
类里面的成员类去访问,对象内的成员用对象去访问。
面向对象类成员之静态方法
#!/usr/bin/env python# _*_coding:utf-8 _*_class Foo:# 静态方法括号内没有self,切方法前一行要加上@staticmethod@staticmethoddef static():# def static(arg1, arg2): # 也可以设置参数print("static")# 静态方法通过类名+方法名既可执行Foo.static()# Foo.static("arg1", "arg2") 通过类调用的时候传入对于的参数即可# 静态方法也可以通过对象去访问,对于静态方法用类去访问obj = Foo()obj.static()
执行结果
/usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s2.pystaticstaticProcess finished with exit code 0
面向对象类成员之类方法
#!/usr/bin/env python# _*_coding:utf-8 _*_class Foo:# 创建类方法的时候需要在方法前面加上@classmethod@classmethoddef ClassMethod(cls): # 并且方法的括号内必须带有cls关键字,类方法的参数是当前类的类名print("类方法")# 调用类方法Foo.ClassMethod()
执行结果:
/usr/bin/python3.5 /home/ansheng/文档/Python_code/sublime/Week06/Day04/s2.py类方法Process finished with exit code 0
面向对象类成员内容梳理
字段
1.静态字段(每个对象都有一份)
2.普通字段(每个对象都不同的数据)
方法
1.静态方法(无需使用对象封装的内容)
2.类方法
3.普通方法(适用对象中的数据)
特性
1.普通特性(将方法未造成字段)
快速判断,类执行、对象执行:
1.self —> 对象调用
2.无self —> 类调用
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
centos7网络性能及设置和服务管理
centOS7网络配置和修改网卡名及常用服务管理命令 1.设置IP地址和网关及DNS centos7里面的网卡名称不在是eth0,1,2而改成enoxxxxxx的格式,en代表的是enthernet以太网,o代表onboard内置,这种新的方式不但长,而且难记,不过优点也比较突出,有编号唯一性,迁移系统的时候不容易出错,网卡名称可以改动,下面会介绍。 服务管理 systemd对Linux来说,就是init程序,可以作为sysvinit和upstat的替代,centos服务管理主要命令是systemctl,centos7的服务不再放在/etc/init.d/下;而放在/usr/lib/systemd/system下,centos7系统中systemctl管理工具整合了chkconfig和service于一体。 2.网络配置文件目录 我们以改为静态为例 配置网络文件ifcfg-eno16777736,设置为none 修改ONBOOT为yes:自动启用网络连接NO:代表关闭 子网掩码也可以用PREFIX=24,根据你自己的子网掩码的进制数改变 DNS可以设置多个,在DNS后面加数字依次排...
-
下一篇
最近为公司制定的备份解决方案
说明 不用TSM,不用CA,不用带库,不用NBU 对于差钱的公司来说,拿土方法自己弄了套免费的 1、拓扑 2、排程 3、各服务器配置说明 备份服务器设置: 1、nfs搭建 [root@wubackuporaclebackup]#rpm-qa|grepnfs nfs4-acl-tools-0.3.3-6.el6.x86_64 nfs-utils-1.2.3-39.el6.x86_64 nfs-utils-lib-1.1.5-6.el6.x86_64 [root@wubackuphome]#vim/etc/exports home/oraclebackup10.55.1.204(rw,no_root_squash) home/eipbackup10.55.1.3(rw,no_root_squash) home/wuwis2backup10.55.1.88(rw,no_root_squash) home/wuwis1backup10.55.1.10(rw,no_root_squash) home/wulmailbackup10.55.1.13(rw,no_root_squash) home/...
相关文章
文章评论
共有0条评论来说两句吧...

微信收款码
支付宝收款码