Python学习:16.Python面对对象(三、反射,构造方法,静态字段,静态方法)
一、构造方法
在使用类创建对象的时候(就是类后面加括号)就自动执行__init__方法。
- class A:
- def __init__(self):
- print('A')
- class B:
- def __init__(self):
- print('B')
- obj = A()
- #虽然只是创建了obj对象,但是执行了__init__方法,输出了A
Python中派生类可以继承父类的构造方法
1.基于super()
遇到super()就表示去执行父类的xxx属性
- class A:
- def __init__(self):
- print('A')
- self.tp = 'annimal'
- class B(A):
- def __init__(self):
- print('B')
- super(B,self).__init__()
- #执行B父类中的__init__方法,这里的self是obj
#super里的self不是传入后面的__init__方法里,而是直接传入A中的__init__,这里super会帮你传递参数- obj = B()
- 输出结果:
- B
- A
2.通过父类的名称执行父类的构造方法。
- class A:
- def __init__(self):
- print('A')
- self.tp = 'annimal'
- class B(A):
- def __init__(self):
- print('B')
- A.__init__(self)
- #父类的名称跟上__init__()
- obj = B()
- 输出结果:
- B
- A
这两种方式中推荐super,使用第二中方法的时候,进行继承父类的方法的时候,是你指定父类的方法,看起来比较乱,但是使用super的时候,没有让你指定父类的名称,这种继承时候就按照正常的继承规则(上一节所讲)来进行。
二、反射
利用反射查看面向对象的成员
根据字符串的形式去对象(某个模块)操作其成员
- class Foo:
- def __init__(self,name):
- self.name = name
- def show(self):
- print('Fshow')
- r = hasattr(Foo,'show')
- print(r)
- #查看Foo类中是否有show函数
- obj = Foo('alexsel')
- s = hasattr(obj,'name')
- print(s)
- #查看obj对象里name是否存在
- t = hasattr(obj,'show')
- print(t)
- #通过对象查看是否存在show这个函数
- 输出结果:
- True
- True
- True
我们通过类进行查询的时候,仅仅只能找到类中的属性,但是我们通过类创建的对象查询的时候,我们不但可以找到对象中的属性(例如,self.name,直接在类中查询找不到),还可以找到对象中的方法(例如show函数),因为对象中有一个指向类的指针,当通过对象进行查询的时候,可以通过指针找到类中的属性。
利用反射导入模块、查找类、创建对象、查找对象中的字段
1.首先使用__import__导入文件
函数功能用于动态的导入模块,主要用于反射或者延迟加载模块。
__import__(module)相当于import module
2.使用getattr(所导入的文件名,类名)导入类
getattr根据字符串的形式去某个模块中寻找东西
3.通过找到的类创建对象
4.获取对象中的属性
s2.py文件中的代码
- class Foo:
- def __init__(self,name):
- self.name = name
- def show(self):
- print('Fshow')
s1.py文件中的代码
- m = __import__('zp')
- class_name = getattr(m,'Foo')
- obj = class_name('Alexsel')
- val = getattr(obj,'name')
- print(val)
- 输出结果:
- Alexsel
三、静态字段
静态字段的作用,将每个对象里存在的重复的东西,使用静态字段在类中只需写一份。
- class Foo:
- annimal = 'Cat'
- #这个是静态字段,是在类中保存的
- def __init__(self,name):
- temp = 'Alexsel'
- #普通字段,存放在对象中
- #普通方法,存放在类中
- def show(self):
- print('SH')
- print(Foo.annimal)
- 输出结果:
- Cat
使用静态字段的时候,优先使用类名访问静态字段。
四、静态方法
静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。
- class Foo:
- annimal = 'Cat'
- def __init__(self):
- pass
- def show(self):
- print('SH')
- #装饰器,使用这个装饰器装饰类中的一个方法,这个方法就变为静态方法
- @staticmethod
- def out():
- print('out')
- Foo.out()
- #静态方法中不需要传递self,所以访问静态方法优先使用类去访问
- obj = Foo()
- obj.out()
- 输出结果:
- out
- out
静态方法可以让我们不需要创建对象就可以执行类中的方法。
五、类方法
类方法是将类本身作为对象进行操作的方法。他和静态方法的区别在于:不管这个方式是从实例调用还是从类调用,它都用第一个参数把类传递过来。
- class Foo:
- annimal = 'Cat'
- def __init__(self):
- pass
- def show(self):
- print('SH')
- #装饰器,使用这个装饰器装饰类中的一个方法,这个方法就变为类方法
- @classmethod
- def out(cls):
- print('out',cls)
- Foo.out()
- #类方法,会自动将的类传递到类方法的cls中
- 输出结果:
- out <class '__main__.Foo'>
Python学习:16.Python面对对象(三、反射,构造方法,静态字段,静态方法)的更多相关文章
- 《转》Python学习(16)-python异常
转自 http://www.cnblogs.com/BeginMan/p/3171445.html 一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中 ...
- Python学习-16.Python中的错误处理
虽然叫错误,但跟 C# 中的异常是一回事.只不过 Python 中叫错误(Error)而 C# 中叫异常(Exception). 先手工产生一个异常: file = open('','r') 上面一句 ...
- Python学习day09 - Python进阶(3)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- python的类和对象(类的静态字段)
转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...
- Python学习day05 - Python基础(3) 格式化输出和基本运算符
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习笔记之类与对象
这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...
- python学习笔记4(对象/引用;多范式; 上下文管理器)
### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是储存在内存中的实体,对象名只是指向这一对象的引用(refere ...
- Python学习之路【第三篇】--集合
语法结构: set1.issubset(set2)判断集合set1是否为set2的子集,返回布尔值. ? 1 2 3 4 5 6 s1 = {'Java', 'PHP', 'Python', 'C++ ...
- Python学习历程之面对对象浅识
# ===============================封装====================================# class Bar:# def __init__(se ...
- Python学习笔记—Python基础1 介绍、发展史、安装、基本语法
第一周学习笔记: 一.Python介绍 1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...
随机推荐
- Win10 mysql容器启动命令
docker run --name mysql -it -p : -e MYSQL_ROOT_PASSWORD=Hongfund5013 -e MYSQL_USER=hongfund_os -e MY ...
- Python学习---重点模块的学习【all】
time [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...
- IOS XMPP总结
//前言:仿weixin实现一个即时通讯的案例,支持版本7.0以上 "准备工作 创建项目时使用git" /* 显示隐藏文件,看到git的文件夹 defaults write com ...
- Redux 源码解读 —— 从源码开始学 Redux
已经快一年没有碰过 React 全家桶了,最近换了个项目组要用到 React 技术栈,所以最近又复习了一下:捡起旧知识的同时又有了一些新的收获,在这里作文以记之. 在阅读文章之前,最好已经知道如何使用 ...
- struts2(2.0.x到2.1.2版本)的核心和工作原理(转)
在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就 ...
- python中的BaseManager通信(一)文件三分
可以在windows下单机运行 主部分(提供服务器) #mainfirst.py from multiprocessing.managers import BaseManager import Que ...
- 5、Dubbo-监控中心
5.1).dubbo-admin 图形化的服务管理页面:安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理 5.2).dubbo-monitor-simple 简单的监 ...
- PHP导出excel表格
<?php header('Content-Type: application/force-download'); header("Content-type: text/html; c ...
- CS20Chapter3
waiting P54 shuffle data 03_Lecture note_Linear and Logistic Regression 学习点1: python的地址输入是要不能用正斜杠\的 ...
- IntelliJ IDEA隐藏不想看到的文件或文件夹
打开IntelliJ IDEA,File -> Settings -> Editor -> File Types 在红框部分加上你想过滤的文件或文件夹名