王振2020-6-1笔记
### ##### 反射 (应用于模块对象)# 概念:通过字符串去操作类对象 或者 模块中的属性方法
class Cat():gift = "九条命"def __init__(self,name):self.name = namedef __str__(self):return self.cat()def cat(self):return "{}小猫有故事{}".format(self.name,self.gift)tom = Cat("汤姆")# (1)类中的反射 (能调用成功才为真,调用不成功就为假)
#hasattr() 检测对象/类是否有指定的成员
res = hasattr(obj,"eye")
print(res)#getattr() 获取对象/类成员的值
func = getattr(obj,"eye")
func() # 没有参数,系统自己会把对象当成参数传入,也就是说反射出来的方法是绑定方法func = getattr(children,"eye")
func() # 通过类反射的方法,系统不会自己传参,也就是普通方法,该怎么样怎么样当类对象中的成员不存在时候,可以设置默认值,也就是第三个参数
例如:func = getattr(obj,"123","默认值参数")#setattr() 设置对象/类成员的值
setattr(obj,"eye","白眼")
print(obj.eye)setattr(children,"myfunc",lambda:print("雷切"))
children.myfunc() # 定义的方法是普通方法,没有自动传参功能,所以用对象调用不了#delattr() 删除对象/类成员的值
delattr(obj,"eye")
delattr(children,"eye")# (2)模块的反射
sys.modules 返回一个系统字典,字典的键是加载的所有模块import sys
print(sys.modules)
print(sys.modules["__main__"]) 获取当前模块的对象<-------------------------------------------------------------------------->
### #### 装饰器
'''
定义:装饰器用于拓展原来函数功能的一种语法,返回新函数替换旧函数
优点:在不更改原函数代码的前提下 给函数拓展新的功能
符号:@'''
# 1.基本用法
def kuozhan(func):def newfunc():print("我是一个大帅哥")func()return newfuncdef func():print("我叫王振")func = kuozhan(func)
func()# 2.@的用法 (1)可以把符号下函数当成参数传递(2)返回新函数,替换旧函数,实现功能扩展
def kuozhan(func):def newfunc():print("我是一个大帅哥")func()return newfunc@kuozhan
def func():print("我叫王振")# 3.装饰器的嵌套
def kuozhan1(func):def newfunc():print("王振1")func()print("王振2")return newfuncdef kuozhan2(func):def newfunc():print("王振3")func()print("王振4")return newfunc@kuozhan2
@kuozhan1
def func():print("我叫王振5") 31524# 4.用装饰器修饰带有参数的函数
def kuozhan(func):def newfunc(who,where):print("王振1")func(who,where)print("王振2")return newfunc@kuozhan
def func(who,where):print("{who}在{where}".format(who=who,where=where))func("朱胜","电影院")# 5.用装饰器修饰带有返回值的函数
def kuozhan(func):def newfunc(*args,**kwargs):print("王振1")lst = func(*args,**kwargs)print("王振2")return lstreturn newfunc@kuozhan
def func(*args,**kwargs):dic = {"wz":"王振","wyl":"魏依琳","yc":"云超"}func(wz = "18斤" ,wyl = "18顿",yc = "18克")# 6.用类装饰器来扩展原函数
(1)类.方法的形式
class KuoZhen():def kuozhan1(func):def newfunc():print("王振1")func()print("王振2")return newfunc@KuoZhen.kuozhan1
def func():print("厕所进行时...")func()(2)类的形式
class KuoZhen():def __call__(self,func)return self.kuozhan1(func)def kuozhan1(self,func):def newfunc():print("王振1")func()print("王振2")return newfunc@KuoZhen()
def func():print("厕所进行时...")func()# 7.带有参数的函数装饰器
def outer(num):def kuozhan(func):def newfunc1(self):print("厕所前,干净整齐")res = func(self)print("厕所后,臭气熏天")return resdef newfunc2(self):print("厕所前,饥肠辘辘")res = func(self)print("厕所后,满口雌黄")return resif num == 1 :return newfunc1 elif num == 2:return newfunc2elif num == 3:# 把方法变成属性return "我是男性" return kuozhanclass MyClass():@outer(1) def func1(self):print("先前一小步,文明一大步")@outer(2)def func2(self):print("来也匆匆,去也匆匆")@outer(3) def func3():print("尿到外面,说明你短!")obj = MyClass()
obj.func1()
obj.func2()
# 把方法变成属性
print(obj.func3)# 8.带有参数的类装饰器
class Kuozhan():ad = "贵族茅房,每小时100元,贵族茅房,欢迎您来,欢迎您再来"def __init__(self,num):self.num = numdef __call__(self,cls):if self.num == 1:return self.newfunc1(cls)elif self.num == 2:return self.newfunc2(cls)def money(self):print("茅中贵族,百岁山")# 参数为1的情况def newfunc1(self,cls):def newfunc():# 为当前cls这个类,添加属性cls.ad = Kuozhan.ad# 为当前cls这个类,添加方法cls.money = Kuozhan.moneyreturn cls() # 对象return newfunc# 参数为2的情况def newfunc2(self,cls):def newfunc():if "run" in cls.__dict__:# 调用类中的方法,拿到返回值res = cls.run()# 把返回值重新赋值给run属性.后者覆盖了前者,方法变成了属性cls.run = resreturn cls()return newfunc@Kuozhan(1)
class MyClass():def run():return "亢龙有悔"obj = MyClass()
print(obj.ad)
obj.money()
<------------------------------>@Kuozhan(2)
class MyClass():def run():return "亢龙有悔"obj = MyClass()
print(obj.run) <------------------------------------------------------------------------>
### 面向对象中的方法
普通方法 可以有参,可以无参,正常函数调用 (无参数的时候,只能类调用,不能对象调用)
绑定方法 绑定到对象(自动传参为对象) 绑定到类(自动传参为类)
静态方法 无论是对象还是类,都可以调用,不会默认传递任何参数#绑定方法(类)@classmethoddef tail(cls):print(cls)print("小狗看到主任喜欢摇尾巴")#静态方法@staticmethoddef jump(num):print("小狗喜欢接飞盘")# 静态方法 (不会默认传递任何参数,如果有参数,当成普通方法调用即可.)
obj.jump(1)
Dog.jump(2)### 在类外,为对象添加成员方法,默认皆是静态方法.
obj.func = lambda : print(123)
obj.func()<------------------------------------------------------------------------>
### property
可以把方法变成属性使用
作用: 控制属性的获取,设置,删除等操作,从而增加成员的安全性获取 @property
设置 @属性名.setter
删除 @属性名.deleter
要求是同一个名字property接收的类,必须先获取,后设置,最后删除,这样的顺序进行传递
例如:username = property(get_username,set_username,del_username)
王振2020-6-1笔记相关推荐
- 李宏毅2020机器学习课程笔记(二)
相关专题: 李宏毅2020机器学习资料汇总 李宏毅2020机器学习课程笔记(一) 文章目录 4. CNN Convolutional Neural Network(P17) 5. GNN Graph ...
- 汤家凤高等数学2020年强化笔记-第三模块-积分学
汤家凤老师2020年高数强化课程手写笔记.第三模块-积分学. 文章目录 第一部分 不定积分 第二部分 定积分 第三部分 二重积分 第四部分 三重积分 第五部分 曲线积分 第六部分 曲面积分 第一部分 ...
- 尚硅谷JavaWeb_2020idea_王振国_学习笔记
文章目录 基本操作 阶段一.使用JS正则表达式检查输入 阶段二.实现登陆和注册功能 阶段三.做一些优化 阶段四.使用EL**表达式修改表单回显** 阶段五.图书模块 阶段五.下.分页的实现 阶段六.登 ...
- CSP-S 2020考前冲刺笔记
文章目录 停课前 2020.10.14 2020.10.15 2020.10.16 2020.10.17 2020.10.18 停课后 2020.10.19 2020.10.20 2020.10.21 ...
- 李宏毅2020机器学习课程笔记(一)
文章目录 1. 课程简介 Course Introduction(P1) Rule of ML 2020(P2) 2. Regression Case Study (P3) Basic concept ...
- 2020年PMP笔记归纳第三章项目经理的角色
第三章 项目经理的角色 掌握第三章项目经理的角色知识 学习内容: 内容章节 3.1 概述 3.2 项目经理的定义 3.3 项目经理的影响力范围 3.4 项目经理的能力 3.5 执行整合 3.1 概述 ...
- egret 白鹭笔记(2020)简单笔记
目录结构 核心文件夹 .src文件夹,所有项目的源代码都放在这个目录下. Main.ts 为项目入口类,也称文档类. egretProperties.json 是项目的配置文件 resource 目录 ...
- 2020年PMP笔记归纳第七章项目成本管理
学习目标: 掌握项目成本管理 学习内容: 章节内容 7.1 规划成本管理 7.2 估算成本 7.3 制定预算 7.4 控制成本 第七章PMBOK概述中的重点内容 项目成本管理包括为使项目在批准的预算内 ...
- 2020年PMP笔记归纳第五章项目管理范围
第五章 项目范围管理 掌握第五章知识点 学习内容: 内容章节 5.1 规划范围管理 5.2 收集需求 5.3 定义范围 5.4 创建WBS 5.5 确认范围 5.6 控制范围 第五章PMBOK概述中的 ...
- 2020印象笔记更改笔记背景色护眼色方法
先给大家看一下更改好后的效果 更改背景色操作,具体操作是: 先随便创建一个笔记,然后随便输入几个字,点击创建的笔记,右击,选择导出,然后导出为enex格式点击确定 然后右击导出的文件,打开方式中选择记 ...
最新文章
- 绝地服务器维护7月5日,绝地求生7月5日更新到几点 吃鸡更新维护公告
- Linux下远程访问mysql数据库
- 看看数据科学家们都在用什么:Github上的十大深度学习项目
- PHP导出MySQL数据字典
- 2016012075 谢月月 散列函数的应用及其安全性
- sizeof 和 strlen
- 信捷电子凸轮使用_FM352电子凸轮使用指南
- MongoDB服务无法启动,原因居然是...
- SpringBoot如何切换Redis默认库
- Java lambda expression
- 用css3和jQuery制作精美的表单
- android怎么长按一张图片保存到相册_好看的微信朋友圈背景图片下载 让你的朋友圈封面个性起来...
- 转-人工智能和机器学习领域大牛
- [备忘]Vim的一个插件扩展版本——exVim
- 基于SSM的新闻管理系统
- BeyondCompare 源代码比对解决方案
- spring 视频教程
- 安卓版AWZ爱伪装一键新机说明
- 批量重命名文件夹和文件名bat脚本
- 美国低速自动驾驶在公共交通应用详解 | 自动驾驶系列