day28 python学习反射 sinstance和issubclass
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的更多相关文章
- python学习之旅
python学习分类 python基础 +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...
- Python学习day34-面向对象和网络编程总结
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习总结:目录
Python 3.x总结 Python学习总结[第一篇]:Python简介及入门 Python学习总结[第二篇]:Python数据结构 Python学习总结[第三篇]:Python之函数(自定义函数. ...
- Python学习(二)Python 简介
Python 简介 官方指南及文档 Python2.7官方指南(中文版):http://pan.baidu.com/s/1dDm18xr Python3.4官方指南(中文版):http://pan.b ...
- Python学习笔记之类与对象
这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...
- Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究
Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: 反射的概念是由Smith在1982年首次提出的 ...
- Python学习之==>面向对象编程(二)
一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
随机推荐
- English trip -- VC(情景课)4 D
What do you see? I can see three men in the pictrue. one older man is a doctor, two younger men are ...
- .NET中使用Rabbit MQ
1.通过Nuget 获取Rabbit MQ NET client bindings from NuGet: PM> Install-Package RabbitMQ.Client 2.发送者(生 ...
- Dajngo的CBV和FBV
CBV: class. base. view 路由: url(r'students/', views.StudentsView.as_view()) 视图: from django.views imp ...
- 牛客网暑期ACM多校训练营(第三场)DEncrypted String Matching fft
题意:给你一个解密后的字符串,给你加密方式,加密过程可能出错,字符可能加减1,然后给你一个字符串,要求匹配个数(其实我也不太懂具体怎么加密解密,反正你把给你的前两个字符串用第三个加密一下,然后搞可以有 ...
- hdu3068 manacher模板题
给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input输入有多组case,不超过120组,每组输入为 ...
- hdu-6324-博弈
Problem F. Grab The Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Ja ...
- UVA-10995 Educational Journey
The University of Calgary team qualified for the 28th ACM International Collegiate Programming Conte ...
- MessageFormat格式化数字
使用MessageFormat格式化数字,有一个很隐蔽的技巧点: public static void main(String[] args) { MessageFormat mf = new Mes ...
- canvas绘制直线
HTML5 <canvas>元素用于图形的绘制,该元素只是图形容器,必须使用javascript脚本绘制图形创建一个画布:<canvas id="myCanvas" ...
- 073——VUE中vuex之使用actions和axios异步初始购物车数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...