python学习之路---day18--反射
一:isinstance,type,issubclass
001:内置函数:isinstance()
class Base:
pass
class Foo(Base):
pass
class Bar(Foo):
pass print(issubclass(Bar,Base)) #True 查看Bar是不是Base的子类(issubclass 可以隔代查看)
print(issubclass(Bar,Foo)) #True 查看Bar是不是Base的子类 print(issubclass(Foo,object)) #True Foo是object的子类
print(issubclass(Bar,object)) #True Bar是object的子类
print(issubclass(Base,object)) #$True Base是object的子类
总结:object是所有类的根,面向对象的祖宗,所有的类都他的子类
02:type:
001: 返回近准数据类型案例
print(type("是的啊")) #<class 'str'> 返回对象的数据类型
class Person:
pass
class HBR(Person):
pass
p=HBR()
print(type(p)) #<class '__main__.HBR'> 可以精准返回数据类型
# 计算a+b的结果,数学运算
def cul(a,b):
if (type(a)==int or type(a)==float) and (type(b)==int or type(a)==float):
return a+b
else:
print("有问题,无法计算!")
c=cul(3,5)
print(c)
03:isinstance() 判断xxx对象是否是xxx类型的 不能隔代
class Animal:
pass
class Cat(Animal):
pass
class BosiCat(Cat):
pass c=Cat()
print(type(c)) #<class '__main__.Cat'> c的类型是 cat
print(c,BosiCat) #Faslse
# print(isinstance(c,BosiCat)) # False
print(isinstance(BosiCat,Animal)) #False 不能隔代查看
04:) 迭代器
from collections import Iterator
lst=[]
it=lst.__iter__() #list_iterator
print(isinstance(it,Iterator)) #True
二:判断是函数还是方法
def Person():
pass
print(Person) #<function Person at 0x000000AFF572EB70> 打印结果显示这个是函数 class Person:
def shuai(self): #实例方法
pass
@staticmethod
def chou(): #静态方法 可以将方法转换为常数运算
pass
@classmethod
def gao(cls):
pass p=Person() 通过打印查看是方法还是函数: # FunctionType:函数 # MethodType: 方法
print(p.shuai()) #加括号打印就是 调用了,会返回值得
用对象来访问 --〉 对象.方法
print(p.shuai) #打印显示是方法 <bound method Person.chi of <__main__.Person object at 0x0000001208A4D400>>
print(p.chou) #打印显示静态方法是一个函数 <function Person.he at 0x00000006415EE9D8>
print(p.gao) #打印显示类方法是一个方法 <bound method Person.gao of <class '__main__.Person'>> 用类名来访问 ---〉 类名.方法
print(Person.shuai) #打印显示方法是一个函数 <function Person.shuai at 0x000000ABD8D8EAE8>
print(Person.chou) #打印显示静态方法是一个函数<function Person.chou at 0x000000ABD8D8E9D8>
print(Person.gao) #打印显示类方法是一个方法<bound method Person.gao of <class '__main__.Person'>>
总结 静态方法都是函数
类方法都是方法,类也是一个对象,也可以创建对象
实例方法用对象访问就是方法,用类名访问就是函数 三:md5加密算法:
01:md5 算法是一种不可逆的加密算法:
# md5 使用案例:登录密码验证(md5 是一种不可逆的加密方式)
import hashlib #倒入模块
salt=b"fsdfse" #设置一个加盐指令 必须要 b"" 以b开头
def jiami(n):
obj=hashlib.md5(salt) #固定格式,创建对象,可以给对象加盐(二次加密),也可以不加盐
obj.update(n.encode("utf-8")) #将明文转换为密文
return obj.hexdigest() #获取密文 # 注册:
usn=input("请输入你的注册ID:")
pd=input("请输入你的密码:")
pd=jiami(pd)
# print(pd) #查询 查询加密后的密文 n=1
#登陆 三次机会
while n<4:
print("登陆界面")
usename=input("请输入你的用户名:")
password=input("请输入你的密码:")
if usename==usn and pd==jiami(password): #查看输入后的密码在加密后是不是与原密码加密后的源码一样
print("欢迎登陆")
break
else:
print("账号或则密码错误")
n+=1
四:反射
基本知识点:我们可以创建一个Tom.py文件,然后在另外一个新的py文件里,先通过倒入 import.Tom 这个文件
来实现访问Tom这个文件
主要用到的-知识点:三个函数
hasattr() :判断源文件(这里指Tom这个文件) 是否有我们要调用的方法名
getattr():从原文件调用我们需要的内容
delattr():删除原文件我们不需要的内容
三个函数都是在内存里面进行的,我们在倒入 import.Tom 这个文件时,文件已经暂存在内存里面了,动作都在在内存里面操作进行的 实例例子:
import Tom
class Car:
def __init__(self,color,pai,price):
self.color=color
self.pai=pai
self.price=price def fly(self):
print("飞的高点吧")
c=Car("黄色","qq",1233)
# delattr(Car,"fly") #操纵我们的类或则对象
# c.fly() #AttributeError: 'Car' object has no attribute 'fly' #将原来的属性改为其它的
# setattr(Car,"fly",lambda n:print("我要飞的更高"))
# c.fly() #我要飞的更高
# print(c.color) #黄色
# 将原来的实例变量改为新的
setattr(c,"color","粉色")
print(c.color) #粉色
print(getattr(c,"pai")) #qq
print(c.pai) #qq
setattr(c,"pai","达蹦")
print(c.pai) #达蹦
print(Tom.name) #hello world
setattr(Tom,"name","bbbbb")
print(Tom.name)
python学习之路---day18--反射的更多相关文章
- python学习之路-day2-pyth基础2
一. 模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...
- Python学习之路-Day2-Python基础3
Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...
- Python学习之路-Day2-Python基础2
Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...
- Python学习之路-Day1-Python基础
学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...
- python学习之路网络编程篇(第四篇)
python学习之路网络编程篇(第四篇) 内容待补充
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- python 学习之路开始了
python 学习之路开始了.....记录点点滴滴....
- python学习之路,2018.8.9
python学习之路,2018.8.9, 学习是一个长期坚持的过程,加油吧,少年!
- Python学习之路——pycharm的第一个项目
Python学习之路——pycharm的第一个项目 简介: 上文中已经介绍如何安装Pycharm已经环境变量的配置.现在软件已经安装成功,现在就开始动手做第一个Python项目.第一个“Hello W ...
- python学习之路------你想要的都在这里了
python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...
随机推荐
- Entitlements
[Entitlements] Entitlements confer specific capabilities or security permissions to your iOS or OS X ...
- Gym 101128 B Black Vienna
题意 有A-Z 26张牌,现在从中抽出3张牌,并把剩下的23张牌分给选手1和2,现在有n次询问,每次询问一个选手是否有某两张牌,和选手的回答.回答说自己有这两张牌中的几张,问拿出的三张牌有多少种方案能 ...
- 开坑数位dp
[背景] 在10月3日的dp专练中,压轴的第6题是一道数位dp,于是各种懵逼. 为了填上这个留存已久的坑,蒟蒻chty只能开坑数位dp了. [例题一][HDU2089]不要62 题目大意:给你一个区间 ...
- golang hello
package main import "fmt" func main() { fmt.Printf("Hello, world.\n") }
- OpenCV 2.4.13 installed in Ubuntu 14 and CMakeLists Demo
1. 配置编译器环境 [compiler] sudo apt-get install build-essential 2. 安装OpenCV的依赖包 [required] -dev pkg-confi ...
- jQuery基础教程-第8章-003Providing flexible method parameters
一.The options object 1.增加阴影效果 (function($) { $.fn.shadow = function() { return this.each(function() ...
- eclipse中的项目无法在build/classes目录下生成.class字节码
转载 原文链接:https://www.cnblogs.com/iceblow/p/6648715.html 1.首先确定project->Build Automatically是否勾选上: ...
- 装饰(Decorator)模式
一. 装饰(Decorator)模式 装饰(Decorator)模式又名包装(Wrapper)模式[GOF95].装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 二. 装饰模式 ...
- centos7 安装pip
首先安装 python3 安装过程1.安装相关依赖 1 sudo yum install openssl-devel -y 2 sudo yum install zlib-devel -y 2.安装s ...
- C# 真正完美的 汉字转拼音
网上有很多说自己整理的汉字转拼音是完美的,但使用后才发现都是半吊的瓶子,问题多多. 常见的生僻字,或多音字识别,转换后简直让人感觉可怕. 主流的转换有三种:hash匹配,Npinyin,微软PinYi ...