### ##### 反射  (应用于模块对象)# 概念:通过字符串去操作类对象 或者 模块中的属性方法
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笔记相关推荐

  1. 李宏毅2020机器学习课程笔记(二)

    相关专题: 李宏毅2020机器学习资料汇总 李宏毅2020机器学习课程笔记(一) 文章目录 4. CNN Convolutional Neural Network(P17) 5. GNN Graph ...

  2. 汤家凤高等数学2020年强化笔记-第三模块-积分学

    汤家凤老师2020年高数强化课程手写笔记.第三模块-积分学. 文章目录 第一部分 不定积分 第二部分 定积分 第三部分 二重积分 第四部分 三重积分 第五部分 曲线积分 第六部分 曲面积分 第一部分 ...

  3. 尚硅谷JavaWeb_2020idea_王振国_学习笔记

    文章目录 基本操作 阶段一.使用JS正则表达式检查输入 阶段二.实现登陆和注册功能 阶段三.做一些优化 阶段四.使用EL**表达式修改表单回显** 阶段五.图书模块 阶段五.下.分页的实现 阶段六.登 ...

  4. 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 ...

  5. 李宏毅2020机器学习课程笔记(一)

    文章目录 1. 课程简介 Course Introduction(P1) Rule of ML 2020(P2) 2. Regression Case Study (P3) Basic concept ...

  6. 2020年PMP笔记归纳第三章项目经理的角色

    第三章 项目经理的角色 掌握第三章项目经理的角色知识 学习内容: 内容章节 3.1 概述 3.2 项目经理的定义 3.3 项目经理的影响力范围 3.4 项目经理的能力 3.5 执行整合 3.1 概述 ...

  7. egret 白鹭笔记(2020)简单笔记

    目录结构 核心文件夹 .src文件夹,所有项目的源代码都放在这个目录下. Main.ts 为项目入口类,也称文档类. egretProperties.json 是项目的配置文件 resource 目录 ...

  8. 2020年PMP笔记归纳第七章项目成本管理

    学习目标: 掌握项目成本管理 学习内容: 章节内容 7.1 规划成本管理 7.2 估算成本 7.3 制定预算 7.4 控制成本 第七章PMBOK概述中的重点内容 项目成本管理包括为使项目在批准的预算内 ...

  9. 2020年PMP笔记归纳第五章项目管理范围

    第五章 项目范围管理 掌握第五章知识点 学习内容: 内容章节 5.1 规划范围管理 5.2 收集需求 5.3 定义范围 5.4 创建WBS 5.5 确认范围 5.6 控制范围 第五章PMBOK概述中的 ...

  10. 2020印象笔记更改笔记背景色护眼色方法

    先给大家看一下更改好后的效果 更改背景色操作,具体操作是: 先随便创建一个笔记,然后随便输入几个字,点击创建的笔记,右击,选择导出,然后导出为enex格式点击确定 然后右击导出的文件,打开方式中选择记 ...

最新文章

  1. 绝地服务器维护7月5日,绝地求生7月5日更新到几点 吃鸡更新维护公告
  2. Linux下远程访问mysql数据库
  3. 看看数据科学家们都在用什么:Github上的十大深度学习项目
  4. PHP导出MySQL数据字典
  5. 2016012075 谢月月 散列函数的应用及其安全性
  6. sizeof 和 strlen
  7. 信捷电子凸轮使用_FM352电子凸轮使用指南
  8. MongoDB服务无法启动,原因居然是...
  9. SpringBoot如何切换Redis默认库
  10. Java lambda expression
  11. 用css3和jQuery制作精美的表单
  12. android怎么长按一张图片保存到相册_好看的微信朋友圈背景图片下载 让你的朋友圈封面个性起来...
  13. 转-人工智能和机器学习领域大牛
  14. [备忘]Vim的一个插件扩展版本——exVim
  15. 基于SSM的新闻管理系统
  16. BeyondCompare 源代码比对解决方案
  17. spring 视频教程
  18. 安卓版AWZ爱伪装一键新机说明
  19. 批量重命名文件夹和文件名bat脚本
  20. 美国低速自动驾驶在公共交通应用详解 | 自动驾驶系列

热门文章

  1. 连续8年参展安博会,UIT创新科发力安防市场
  2. Centos 服务器 获取出口ip地址
  3. 分享77个PHP源码,总有一款适合您
  4. UCOSII学习笔录
  5. 菜鸟学Java——Jboss瘦身
  6. halcon 纹理检测_木板纹理识别 基于Halcon进行图像算法处理 - 下载 - 搜珍网
  7. 信号与线性系统管致中第六版pdf_现代控制理论线性系统入门(十)轨迹追踪反馈控制...
  8. 雅虎程序员14条军规!
  9. 论文写作中的阅读翻译外文文献
  10. linux如何切换gcc版本,切换GCC编译器版本