isinstance和issubclass

isinstance(obj,cls)检查是否obj是否是类 cls 的对象

判断这个对象是不是这个类,或者是不是这个类的子类的实例化

class Foo(object):
pass obj = Foo() isinstance(obj, Foo)

issubclass(sub, super)检查sub类是否是 super 类的子类(派生类 )

class Foo(object):
pass class Bar(Foo):
pass issubclass(Bar, Foo)

vars()  与 dir()  相似

c='c0'
d='d1'
print(vars())#查看这个空间中的方法名和方法的数据(以建键值对的方式存在),以键值对的方式体现出来
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000058C6B677F0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/py/day28/test.py', '__cached__': None, 'c': 'c0', 'd': 'd1'} print(dir())#查看方法
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'c', 'd']

__doc__ :   它后边的信息就是注释信息(注释信息不能写错,以免误导人)

class A:
def func(self,a, b):#当我在下边加三队"""下边会自动联想出来需要加注释的内容,你可以对他进行注释
""" :param a: 这里会自动跳出让加注释的内容,点
:param b:
:return: """
b=A
print(vars(A)) #查看类A中的方法,
可以看到打印出的内容有 '__doc__': '类管理员',

反射

1 什么是反射

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。

2 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)

四个可以实现自省的函数

下列方法适用于类和对象(一切皆对象,类本身也是一个对象)

class Maneger:
def __init__(self,name,phone):
self.name=name
self.phone=phone
def make_techer(self):
print('增加了一条老师信息')
xiaoyu=Maneger('小雨',1854521)
a=getattr(xiaoyu,'phone') #通过给一个字符串类型的变量名,获得他的静态属性值
print(a)
b=getattr(xiaoyu,'make_techer')
b() #通过给一个字符串类型的变量名,调用他的方法
# c=getattr(Maneger,'make_techer')
# c()
if hasattr(xiaoyu,'age'):
e=getattr(xiaoyu,'age')
print(a)
# else:
# print('没有这个属性')
# setattr(Maneger,'Country','CHINA') #通过字符串类的属性名,对应属性来添加属性
# print(Maneger.Country)
# setattr(xiaoyu,'Country','meiguo')# 通过字符串类的来增加他得属性民和方法
# print(xiaoyu.Country)
# # delattr(Maneger,'Country')

# hasattr(对象名,'属性名') 返回True或False
#属性值 = getattr(对象名,'属性名')
#方法的内存地址 = getattr(对象名,'方法名')
#方法的内存地址()

class A:
role=''
def func(self):
lis=[]
a=input('aa')
lis.append(a)
return lis
a=getattr(A,'func') #当直接对类中的方法反射时,因为里边有一个self,
# 所以在a()中随意写一个内容就可以让他执行了 因为函数哪里需要有参数传过去,
# 但是不会在内部使用
# func() missing 1 required positional argument: 'self'
a('q1') class B:
role=''
@staticmethod #或者写成这种类静态方法的形式就可以不用写self 这个参数
def func():
lis=[]
a=input('aa')
lis.append(a)
return lis
a=getattr(B,'func')
a()#这里直接写就可以,不用写参数

day28 python学习反射 sinstance和issubclass的更多相关文章

  1. python学习之旅

    python学习分类 python基础    +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...

  2. Python学习day34-面向对象和网络编程总结

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  3. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  4. Python学习总结:目录

    Python 3.x总结 Python学习总结[第一篇]:Python简介及入门 Python学习总结[第二篇]:Python数据结构 Python学习总结[第三篇]:Python之函数(自定义函数. ...

  5. Python学习(二)Python 简介

    Python 简介 官方指南及文档 Python2.7官方指南(中文版):http://pan.baidu.com/s/1dDm18xr Python3.4官方指南(中文版):http://pan.b ...

  6. Python学习笔记之类与对象

    这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...

  7. Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究

    Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: ​ 反射的概念是由Smith在1982年首次提出的 ...

  8. Python学习之==>面向对象编程(二)

    一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...

  9. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

随机推荐

  1. Confluence 6 嵌套用户组的示例

    示例 1 : 用是一个子用户组成员 想象在你的目录服务器中,存在下面 2 个用户组: staff marketing 成员: marketing 用户组是  staff 的成员. 用户 jsmith ...

  2. bzoj2154: Crash的数字表格 莫比乌斯反演

    题意:求\(\sum_{i=1}^n \sum_{j=1}^m\frac{i*j}{gcd(i,j)}\) 题解:\(ans=\sum_{i=1}^n\sum_{j=1}^m \frac{i*j}{g ...

  3. python-day53--前端js

    一.基本语法(ECMA) 单行注释 // /* 多行注释 */ 变量赋值 默认以换行符作为结束符,有分好以分号作为结束符号 JS的引入方式: 1. <script> </script ...

  4. python-day38--IO模型

    一. IO模型介绍 对于一个网络通信,IO涉及到两个阶段 1.操作系统等数据来 2.进程或线程等操作系统拷贝数据 记住这两点很重要,因为这些IO模型的区别就是在两个阶段上各有不同的情况. 二.阻塞IO ...

  5. Wannafly挑战赛20-A,B

    A-链接:https://www.nowcoder.com/acm/contest/133/A来源:牛客网 题目描述 现在有一棵被Samsara-Karma染了k种颜色的树,每种颜色有着不同的价值 A ...

  6. UVA-10061 How many zero's and how many digits ? (数论)

    题目大意:让求n!在base进制下的位数以及末尾0的连续个数. 题目分析:一个m位的b进制数N,最小是b^(m-1),最大不超过b^m,即b^(m-1)≤N<b^m.解不等式,得log10(N) ...

  7. 常见MIME类型例表

    常见MIME类型例表: 序号 内容类型 文件扩展名 描述 1 application/msword doc Microsoft Word 2 application/octet-stream bin ...

  8. winRAR显示树树目录

    这样 比较方便

  9. Awk 从入门到放弃 (8) 动作总结之三

    awk continue 语句  awk exit 语句  awk if  语句  awk next 语句 awk break 语句

  10. POJ 3352 Road Construction 双联通分量 难度:1

    http://poj.org/problem?id=3352 有重边的话重边就不被包含在双连通里了 割点不一定连着割边,因为这个图不一定是点连通,所以可能出现反而多增加了双连通分量数的可能 必须要用割 ...