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. 现在转战c++的领域,纯幼儿园

    C++中: 如果你用#include<iostream.h>就不需写这句话(旧标准).但是如果你用#include<iostream>就必须要写.但是在VS2010中就出现错误 ...

  2. JSP EL简介

    JSP EL简介:1.语法:    ${expression} 2.[ ]与.运算符    EL 提供“.“和“[ ]“两种运算符来存取数据.     当要存取的属性名称中包含一些特殊字符,如.或?等 ...

  3. java.lang.Exception: Socket bind failed: [730048]

    严重: Error initializing endpoint java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/ ...

  4. 应用多种变形CSS3

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    < ...

  5. Cxfreeze使用存在问题

    Cxfreeze使用 cx_Freeze-5.1.1-cp36-cp36m-win_amd64.wh 1● 打包多个文件 Cxfreeze D:/test.py –target-dir D:/   c ...

  6. ECC算法整理纪要

    初始ECC算法 1.用户A 密钥生成 (1):用随机数发生器产生随机数k∈[1,n-1]: (2):计算椭圆曲线点PA=[k]G,为公钥,k为用户A私钥: 2. 用户B加密算法及流程 设需要发送的消息 ...

  7. asp.net文件压缩,下载,物理路径,相对路径,删除文件

    知识动手实践一次,就可以变成自己的了.不然一直是老师的,书本的. 这几天做了一个小小的项目,需要用到文件下载功能,期初想到只是单个的文件,后面想到如果很多文件怎么办?于是又想到文件压缩.几经波折实践, ...

  8. 《Python》 生成器和列表推导式

    一.初识生成器: 生成器就是自己用Python代码写的迭代器,生成器的本质就是迭代器. 1.Python中提供的生成器: 1.生成器函数: 使用yield语句而不是return语句返回结果.yield ...

  9. LeetCode OJ:Insert Interval

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  10. 基于GUI的简单聊天室01

    运用了Socket编程,gui,流的读入和写出,线程控制等 思路: 1.首先是在客户端中先建立好聊天的GUI 2.建立服务器端,设置好端口号(用SocketServer),其中需要两个boolean变 ...