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. 20170503xlVBA房地产数据分类连接

    Sub NextSeven_CodeFrame4() Application.ScreenUpdating = False Application.DisplayAlerts = False Appl ...

  2. 4-6 select_tag和select的区别和理解。javascript_tag

    via: :all是什么意思?主要用于约束http动作. <%= select_tag "set_locale", options_for_select(LANGUAGES, ...

  3. oo第四篇博客作业

    测试与正确性论证的效果差异及各自的优缺点: 测试针对一些典型的输入情况进行方法验证,可操作性更强,结果直观.但不能完全覆盖所有的输入情况. 正确性论证则是根据代码逻辑从所有的方面对方法进行论证,可操作 ...

  4. 使用dbms_output.put_line打印异常所在的行

    dbms_output.put_line(dbms_utility.format_error_stack); dbms_output.put_line(dbms_utility.format_call ...

  5. 46. 47. Permutations

    求全排列. 1. 无重复元素 Given a collection of distinct numbers, return all possible permutations. For example ...

  6. Win32.com安装

    Win32.com安装     http://sourceforge.net/projects/pywin32/files/pywin32     

  7. Taffy自动化测试框架Web开发,Python Flask实践详解

    1. 前言 最近为Taffy自动化测试框架写了个页面,主要实现了用例管理.执行,测试报告查看管理.发送邮件及配置等功能.   本页面适用所有基于taffy/nose框架编写的自动化测试脚本,或基于un ...

  8. Oracle 11g 在audit_file_dest目录下产生大量的aud文件

    一.adump目录数据暴增现象 发现某台数据库服务器的根目录的使用率在暴涨,发现Oracle数据库的adump目录,每秒生成一个dump文件.数据库并未开通审计外部记录.为什么adump目录会生成那么 ...

  9. GMTcolor

    http://gmt-tutorials.org/coloring_topography.html gmt grdcut topo15.grd -R -Gcut gmt grdgradient cut ...

  10. 测试JS方法运行时间

    console.time(label) 和 console.timeEnd(label), 在开始的地方写上 console.time("测试 fn 速度: ") ,在结束的地方写 ...