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基础 ...
随机推荐
- (一)maven的安装
Maven下载 下载地址:http://maven.apache.org/download.cgi 下载完成后,得到一个压缩包
- Ubuntu16.04 ARM平台移植libcurl curl-7.63.0
libcurl是免费的轻量级的客户端网络库,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS,POP3, P ...
- c语言实战 BJT时间转化位UTC时间
题目是这样的: 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果小时小 ...
- Linux Valgrind命令
一.简介 C/C++程序,最常见的错误之一就是内存泄露.Valgrind 是一款 Linux下的内存调试工具,它可以对编译后的二进制程序进行内存使用监测找出内存泄漏问题. Valgrind通常包括如下 ...
- vue.js的一些模板指令简述
1.模板指令都是写在<template></template>html里面 v-text : value是什么就显示什么,如果value里面有html的标签,也会直接显示出 ...
- ESP8266-iot-2
1.SDK概述 复制相关的工程文件到HelloWorld里面 要在版本esp8266_nonos_sdk_v2.0.0_16_07_19上面开发,那么就要复制相应文件 然后打开IDE 导入HelloW ...
- Linux下chmod 777 修改权限
在linux操作系统下,使用shell命令来操作: 关于权限的问题用chmod命令来修改权限 -rw-r-r-- 1 root root 可参考:http://zhidao.baidu.com/lin ...
- bug记录:IE8,包含块min-height/height共存时的高度计算bug
问题的条件有: A元素是B元素的包含块. A元素设置overflow:hidden;,并同时设置了height和min-height,同时height计算值 < min-height 原生IE8 ...
- .NET Core 1.0正式发布
Major .NET Core components: Base Class Libraries CoreCLR runtime and RyuJIT compiler Roslyn compiler ...
- UVa 10245 The Closest Pair Problem (分治)
题意:给定 n 个点,求最近两个点的距离. 析:直接求肯定要超时的,利用分治法,先把点分成两大类,答案要么在左边,要么在右边,要么一个点在左边一个点在右边,然后在左边或右边的好求,那么对于一个在左边一 ...