####################总结##########

1.

  1. isinstance: 判断xxx是否是xxx类型的(向上判断)
  2. type: 返回xx对象的数据类型
  3. issubclass: 判断xxx类是否是xxx类的子类

type: 返回xx对象的数据类型

  1. def add(a, b):
  2. if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
  3. return a + b
  4. else:
  5. print("算不了")
  6.  
  7. print(add("胡汉三", 2.5))

issubclass: 判断xxx类是否是xxx类的子类

  1. class Animal:
  2. pass
  3. class Cat(Animal):
  4. pass
  5. class BoSiCat(Cat):
  6. pass
  7. print(issubclass(Cat, Animal)) # 判断第一个参数是否是第二个参数的后代
  8. print(issubclass(Animal, Cat))
  9. print(issubclass(BoSiCat, Animal)) # True
  10.  
  11. #结果
  12. True
  13. False
  14. True

2.

区分函数和方法

  1. #方法一
  2.  
  3. def func():
  4. print("我是函数")
  5. class Foo:
  6. def chi(self):
  7. print("我是吃")
  8. # print(func) # <function func at 0x0000000001D42E18>
  9. f = Foo()
  10. # f.chi()
  11.  
  12. print(f.chi) # <bound method Foo.chi of <__main__.Foo object at 0x0000000002894A90>>
  13.  
  14. # 野路子: 打印的结果中包含了function. 函数
  15. # method . 方法
  1. #方法二
    from collections import Iterable, Iterator # 迭代器
    from types import FunctionType, MethodType # 方法和函数
  2. class Person:
  3. def chi(self): # 实例方法
  4. print("我要吃鱼")
  5.  
  6. @classmethod
  7. def he(cls):
  8. print("我是类方法")
  9.  
  10. @staticmethod
  11. def pi():
  12. print("泥溪镇地皮")
  13. p = Person()
  14.  
  15. print(isinstance(Person.chi, FunctionType)) # True
  16. 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属性从对象中删除

  1. class Person:
  2. def __init__(self,name,laopo):
  3. self.name=name
  4. self.laopo=laopo
  5. p= Person('宝宝','林志玲')
  6.  
  7. print(hasattr(p,'laopo'))
  8. print(getattr(p,'laopo'))
  9. setattr(p,'laopo','胡一菲')
  10. setattr(p,'money',1000)
  11.  
  12. print(p.laopo)
  13. print(p.money)
  14. delattr(p, "laopo") # 把对象中的xxx属性移除. != p.laopo = None
  15. print(p.laopo)
  16.  
  17. ########结果
  18. True
  19. 林志玲
  20. 胡一菲
  21. 1000
  22.  
  23. Traceback (most recent call last):
  24. File "D:/python_work_s18/day18关系/test.py", line 87, in <module>
  25. print(p.laopo)
  26. AttributeError: 'Person' object has no attribute 'laopo'
  27.  
  28. Process finished with exit code 1

实例二

  1. ####单独文件master
  2. def chi():
  3. print("大牛很能吃")
  4.  
  5. def he():
  6. print("大牛一次喝一桶")
  7.  
  8. def shui():
  9. print("大牛一次睡一年")
  10.  
  11. def play_1():
  12. print("大牛不玩儿压缩了. 玩儿儿童节")
  13.  
  14. def sa():
  15. print("大牛很能撒谎")
  16.  
  17. def la():
  18. print("大牛喜欢拉二胡")
  1. while 1:
  2. content = input("请输入你要测试的功能:") # 用户输入的功能是一个字符串
  3.  
  4. # 判断 xxx对象中是否包含了xxxxx
  5. if hasattr(master, content):
  6. xx = getattr(master, content)
  7. xx()
  8. print("有这个功能")
  9. else:
  10. print('没有这个功能')

python 面向对象(四)反射的更多相关文章

  1. Python 面向对象(四) 反射及其魔术方法

    反射 reflection 也有人称之为自省 作用: 运行时获取.添加对象的类型定义信息,包括类 内建方法: getattr(object, name[, default])   返回object对象 ...

  2. Python 面向对象之反射

    Python 面向对象之反射 TOC 什么是反射? hasattr getattr setattr delattr 哪些对象可以使用反射 反射的好处 例子一 例子二 什么是反射? 程序可以访问.检查和 ...

  3. python 面向对象之反射及内置方法

    面向对象之反射及内置方法 一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静 ...

  4. Python面向对象之反射,双下方法

    一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  5. python面向对象进阶 反射 单例模式 以及python实现类似java接口功能

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...

  6. Python面向对象之-反射

    Python中一切皆对象,在Python中的反射:通过字符串的形式操作对象的属性 hasattr  判断是否有改属性或者方法,有返回True,没有返回false getattr  如果是属性获得该属性 ...

  7. python面向对象的反射

    python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) getattr # 根据字符串的形式,去对象中找成员.hasattr # 根据字符 ...

  8. 第三十四篇 Python面向对象之 反射(自省)

    什么是反射? 反射的概念是由Smith在1982年提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语 ...

  9. Python面向对象之反射

    一.反射的基本概念 二.反射示例 三.反射的应用 一.反射的基本概念 反射:可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),Python中一切皆对象,都可以使用反射. 反射有 ...

随机推荐

  1. 【XSY1522】灯 乱搞

    题目大意 ​ \(n\)盏灯排成一列,标号\(1\)到\(n\),一开始标号为\(1\)的灯亮着. ​ 现在依次对于\(2\)~\(n\)的每一个质数\(p_i\),指定一盏亮着的灯\(a_i\),点 ...

  2. word 2013 粘贴的图片自适应大小

    1.先切换到页面视图 2.粘贴图片进去,成功自适应,像素不变,可右键图片另存为图片,查看原始图片,或者ctrl+滚轮上放大. 3.在其他视图就会出现超出范围的情况,还要自己调整

  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$为常数, ...

  4. dll 修复....

    之前在安装时总是会碰到缺少什么dll文件,总是头疼的要命,这次很幸运的在网上搜到了这个神奇的小玩意,只需要运行就能够修复缺少的所有的dll文件,所以在这小小的分享一下. 链接:https://pan. ...

  5. 【CF981D】Bookshelves(贪心,动态规划)

    [CF981D]Bookshelves(贪心,动态规划) 题面 洛谷 Codeforces 给定一个长度为\(n\)的数列,把他们划分成\(k\)段,使得每段的和的结构按位与起来最大. 题解 从高位往 ...

  6. HDU 6336 Matrix from Arrays (杭电多校4E)

    遇事不决先打表. 然后会发现(个屁)大的矩形是由一个2L*2L的矩形重复出现组成的然后我们就可以这个矩形分成四个点到(0, 0)点的矩形,这样问题就变成了求四个到顶点(0, 0)的矩形的面积,然后就先 ...

  7. django restframework 环境配置

    Requirements: coreapi (1.32.0+) - Schema generation support.Markdown (2.1.0+) - Markdown support for ...

  8. 2019西北工业大学程序设计创新实践基地春季选拔赛(重现赛) Chino with Equation(组合公式)

    链接:https://ac.nowcoder.com/acm/contest/553/D来源:牛客网 题目描述 Chino的数学很差,因此Cocoa非常担心.今天,Cocoa要教Chino解不定方程. ...

  9. 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 ...

  10. 【洛谷P2585】三色二叉树

    题目大意:给定一个二叉树,可以染红绿黄三种颜色,要求父节点和子节点的颜色不同,且如果一个节点有两个子节点,那么两个子节点之间的颜色也不同.求最多和最少有多少个节点会被染成绿色. 题解:加深了对二叉树的 ...