python 面向对象(四)反射
####################总结##########
1.
- isinstance: 判断xxx是否是xxx类型的(向上判断)
- type: 返回xx对象的数据类型
- issubclass: 判断xxx类是否是xxx类的子类
type: 返回xx对象的数据类型
- def add(a, b):
- if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
- return a + b
- else:
- print("算不了")
- print(add("胡汉三", 2.5))
issubclass: 判断xxx类是否是xxx类的子类
- class Animal:
- pass
- class Cat(Animal):
- pass
- class BoSiCat(Cat):
- pass
- print(issubclass(Cat, Animal)) # 判断第一个参数是否是第二个参数的后代
- print(issubclass(Animal, Cat))
- print(issubclass(BoSiCat, Animal)) # True
- #结果
- True
- False
- True
2.
区分函数和方法
- #方法一
- def func():
- print("我是函数")
- class Foo:
- def chi(self):
- print("我是吃")
- # print(func) # <function func at 0x0000000001D42E18>
- f = Foo()
- # f.chi()
- print(f.chi) # <bound method Foo.chi of <__main__.Foo object at 0x0000000002894A90>>
- # 野路子: 打印的结果中包含了function. 函数
- # method . 方法
- #方法二
from collections import Iterable, Iterator # 迭代器
from types import FunctionType, MethodType # 方法和函数- class Person:
- def chi(self): # 实例方法
- print("我要吃鱼")
- @classmethod
- def he(cls):
- print("我是类方法")
- @staticmethod
- def pi():
- print("泥溪镇地皮")
- p = Person()
- print(isinstance(Person.chi, FunctionType)) # True
- print(isinstance(p.chi, MethodType)) # True
3.反射
1. hasattr(对象, str) 判断对象中是否包含str属性
2. getattr(对象, str) 从对象中获取到str属性的值
3. setattr(对象, str, value) 把对象中的str属性设置为value
4. delattr(对象, str) 把str属性从对象中删除
- class Person:
- def __init__(self,name,laopo):
- self.name=name
- self.laopo=laopo
- p= Person('宝宝','林志玲')
- print(hasattr(p,'laopo'))
- print(getattr(p,'laopo'))
- setattr(p,'laopo','胡一菲')
- setattr(p,'money',1000)
- print(p.laopo)
- print(p.money)
- delattr(p, "laopo") # 把对象中的xxx属性移除. != p.laopo = None
- print(p.laopo)
- ########结果
- True
- 林志玲
- 胡一菲
- 1000
- Traceback (most recent call last):
- File "D:/python_work_s18/day18关系/test.py", line 87, in <module>
- print(p.laopo)
- AttributeError: 'Person' object has no attribute 'laopo'
- Process finished with exit code 1
实例二
- ####单独文件master
- def chi():
- print("大牛很能吃")
- def he():
- print("大牛一次喝一桶")
- def shui():
- print("大牛一次睡一年")
- def play_1():
- print("大牛不玩儿压缩了. 玩儿儿童节")
- def sa():
- print("大牛很能撒谎")
- def la():
- print("大牛喜欢拉二胡")
- while 1:
- content = input("请输入你要测试的功能:") # 用户输入的功能是一个字符串
- # 判断 xxx对象中是否包含了xxxxx
- if hasattr(master, content):
- xx = getattr(master, content)
- xx()
- print("有这个功能")
- else:
- print('没有这个功能')
python 面向对象(四)反射的更多相关文章
- Python 面向对象(四) 反射及其魔术方法
反射 reflection 也有人称之为自省 作用: 运行时获取.添加对象的类型定义信息,包括类 内建方法: getattr(object, name[, default]) 返回object对象 ...
- Python 面向对象之反射
Python 面向对象之反射 TOC 什么是反射? hasattr getattr setattr delattr 哪些对象可以使用反射 反射的好处 例子一 例子二 什么是反射? 程序可以访问.检查和 ...
- python 面向对象之反射及内置方法
面向对象之反射及内置方法 一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静 ...
- Python面向对象之反射,双下方法
一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- python面向对象进阶 反射 单例模式 以及python实现类似java接口功能
本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...
- Python面向对象之-反射
Python中一切皆对象,在Python中的反射:通过字符串的形式操作对象的属性 hasattr 判断是否有改属性或者方法,有返回True,没有返回false getattr 如果是属性获得该属性 ...
- python面向对象的反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) getattr # 根据字符串的形式,去对象中找成员.hasattr # 根据字符 ...
- 第三十四篇 Python面向对象之 反射(自省)
什么是反射? 反射的概念是由Smith在1982年提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语 ...
- Python面向对象之反射
一.反射的基本概念 二.反射示例 三.反射的应用 一.反射的基本概念 反射:可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),Python中一切皆对象,都可以使用反射. 反射有 ...
随机推荐
- 【XSY1522】灯 乱搞
题目大意 \(n\)盏灯排成一列,标号\(1\)到\(n\),一开始标号为\(1\)的灯亮着. 现在依次对于\(2\)~\(n\)的每一个质数\(p_i\),指定一盏亮着的灯\(a_i\),点 ...
- word 2013 粘贴的图片自适应大小
1.先切换到页面视图 2.粘贴图片进去,成功自适应,像素不变,可右键图片另存为图片,查看原始图片,或者ctrl+滚轮上放大. 3.在其他视图就会出现超出范围的情况,还要自己调整
- MT【277】华中科技大学理科实验班选拔之三次方程
(2015华中科技大学理科实验班选拔)已知三次方程$x^3+ax^2+bx+x=0$有三个实数根.(1)若三个实根为$x_1,x_2,x_3$,且$x_1\le x_2\le x_3,a,b$为常数, ...
- dll 修复....
之前在安装时总是会碰到缺少什么dll文件,总是头疼的要命,这次很幸运的在网上搜到了这个神奇的小玩意,只需要运行就能够修复缺少的所有的dll文件,所以在这小小的分享一下. 链接:https://pan. ...
- 【CF981D】Bookshelves(贪心,动态规划)
[CF981D]Bookshelves(贪心,动态规划) 题面 洛谷 Codeforces 给定一个长度为\(n\)的数列,把他们划分成\(k\)段,使得每段的和的结构按位与起来最大. 题解 从高位往 ...
- HDU 6336 Matrix from Arrays (杭电多校4E)
遇事不决先打表. 然后会发现(个屁)大的矩形是由一个2L*2L的矩形重复出现组成的然后我们就可以这个矩形分成四个点到(0, 0)点的矩形,这样问题就变成了求四个到顶点(0, 0)的矩形的面积,然后就先 ...
- django restframework 环境配置
Requirements: coreapi (1.32.0+) - Schema generation support.Markdown (2.1.0+) - Markdown support for ...
- 2019西北工业大学程序设计创新实践基地春季选拔赛(重现赛) Chino with Equation(组合公式)
链接:https://ac.nowcoder.com/acm/contest/553/D来源:牛客网 题目描述 Chino的数学很差,因此Cocoa非常担心.今天,Cocoa要教Chino解不定方程. ...
- A1066. Root of AVL Tree
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...
- 【洛谷P2585】三色二叉树
题目大意:给定一个二叉树,可以染红绿黄三种颜色,要求父节点和子节点的颜色不同,且如果一个节点有两个子节点,那么两个子节点之间的颜色也不同.求最多和最少有多少个节点会被染成绿色. 题解:加深了对二叉树的 ...