day8_类的装饰器和反射
"""
类的装饰器:
@property
当类的函数属性声明 @property后, 函数属性不需要加括号 即可调用
@staticmethod
当类的函数属性声明 @staticmethod后, 把函数属性声明为静态属性, 不能直接访问类属性与实例属性
@classmethod
当函数属性声明 @classmethod后,把函数属性声明为类属性,不能直接访问实例属性,类可以直接调用 """
class A():
q = "清华大学"
def __init__(self):
self.name = "不忘初心,方缘继续努力ing"
self.oh = 666
@property
def add(self):
print(self.name)
return 1+1 @staticmethod
def result(para):
# para()是一个对象
print(para().add) # 函数属性声明为静态属性时,不能直接访问类属性和实例属性
print(para.add)
return 3*3 @classmethod
def clas(cls):
# print(cls.oh) # 函数属性声明为类属性时,不能直接访问实例对象,但可以访问类属性
print(cls.q) # q为类A的静态属性
# 调试程序
if __name__ == "__main__":
# 创建类A的对象(实例)data
data = A()
# 参数A是一个类
A.result(A)
# 函数属性不用加括号
print(data.add)
data.clas() # 打印对象的属性字典
对象 = A()
print(对象.__dict__)
"""
反射:
hasattr(obj, str) 返回布尔值, 当str存在于 obj时,返回true, 否则返回false
getattr(obj, str) 返回str的内存地址
"""
class He():
# pass
def interface(self,user,passwd):
if user == "belief" and passwd == "123":
return 1 # 等效于return True
else:
error = "账号或密码错误!!!"
return error class I():
def login(self):
if hasattr(He,"interface"):
user = input("用户名>>>:")
passwd = input("密码>>>:")
func = getattr(He,"interface")
data = func(self,user,passwd)
if data == 1: # 等效于if data == True
print("这是一个完美的登陆界面!!!")
else:
print(data)
else:
print("他去旅游了,还没回来敲代码!!!") def index(self):
print("登陆成功后执行我") if __name__ == "__main__":
i = I()
i.login()
day8_类的装饰器和反射的更多相关文章
- python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解
1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过google和阅读源码,现将自己的理解和心得记录下来,也为正在为了该问题 ...
- 11.python描述符---类的装饰器---@property
描述符1.描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()这三个内置方法中的一个,描述符也被称为描述符协议(1):__ ...
- Python之路(第二十八篇) 面向对象进阶:类的装饰器、元类
一.类的装饰器 类作为一个对象,也可以被装饰. 例子 def wrap(obj): print("装饰器-----") obj.x = 1 obj.y = 3 obj.z = 5 ...
- python使用类作为装饰器
1.普通就是一个函数作为装饰器,也可以用类名作为装饰器. 因为类和函数都是callable的,都可以使用括号来调用运行他. 2.上上篇的缓存一段时间的还是函数作为装饰器,类只是充当了比模块更下一级的命 ...
- Python全栈day28(类的装饰器)
类是一个对象也可以像函数一样加装饰器 类的装饰器.py def deco(obj): print('======',obj) obj.x=1 obj.y=2 obj.z=3 return obj # ...
- python 类的装饰器
我们知道,在不改变原有代码的基础上,我们可以使用装饰器为函数添加新的功能.同理,一切皆对象,我们也可以使用装饰器为类添加类属性.what? def deco(obj): obj.x = 1 obj.y ...
- day28-描述符应用与类的装饰器
#!/usr/bin/env python# -*- coding:utf-8 -*-# ------------------------------------------------------- ...
- Python学习第十九课——类的装饰器
类的装饰器 # def deco(func): # print('==========') # return func # # # @deco #test=deco(test) # # def tes ...
- 第7.18节 案例详解:Python类中装饰器@staticmethod定义的静态方法
第7.18节 案例详解:Python类中装饰器@staticmethod定义的静态方法 上节介绍了Python中类的静态方法,本节将结合案例详细说明相关内容. 一. 案例说明 本节定义了类Sta ...
随机推荐
- 80道最新java基础部分面试题(五)
自己整理的面试题,希望可以帮到大家,需要更多资料的可以私信我哦,大家一起学习进步! 48.同步和异步有何异同,在什么情况下分别使用他们?举例说明. 如果数据将在线程间共享.例如正在写的数据以后可能被 ...
- docker修改系统时间总结
最近弄docker烦躁的一笔,时区问题踩了不少坑,为了以后再遇到类似问题再花时间查资料,特记录一下... Ubuntu: echo "Asia/Shanghai" > /et ...
- Paper | Highway Networks
目录 1. 网络结构 2. 分析 解决的问题:在当时,人们认为 提高深度 是 提高精度 的法宝.但是网络训练也变得很困难.本文旨在解决深度网络训练难的问题,本质是解决梯度问题. 提出的网络:本文提出的 ...
- 阿里Nacos初体验
Nacos 从开源到现在已经18个releases了,更新很快,社区也很活跃,光钉钉群的人数那也是好多,每次点个查看全部成员的按钮,我的钉钉就要卡死,也有可能我没更新最新的版本. 前面写了一段时间的S ...
- Golang 入门 : channel(通道)
笔者在<Golang 入门 : 竞争条件>一文中介绍了 Golang 并发编程中需要面对的竞争条件.本文我们就介绍如何使用 Golang 提供的 channel(通道) 消除竞争条件. C ...
- 一文学会 TypeScript 的 82% 常用知识点(上)
前端专栏 2019-11-22 19:17:55 对于前端从业者来说,TypeScript(以下简称 TS)已经不算是新技术. Vue3 的源码基于 TS 编写, Angular 项目默认支持 TS ...
- 实例演示 C# 中 Dictionary<Key, Value> 的检索速度远远大于 hobbyList.Where(c => c.UserId == user.Id)
前言 我们知道,有时候在一些项目中,为了性能,往往会一次性加载很多条记录来进行循环处理(备注:而非列表呈现).比如:从数据库中加载 10000 个用户,并且每个用户包含了 20 个“爱好”,在 Wi ...
- javaScript之基础介绍
前言一:javascript历史背景介绍 布兰登 • 艾奇(Brendan Eich,1961年-),1995年在网景公司,发明的JavaScript. 一开始JavaScript叫做LiveScri ...
- CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上)smoke fizz
前言 完成这个实验大概花费一天半的时间,看了很多大佬的博客,也踩了很多的坑,于是打算写一篇博客重新梳理一下思路和过程,大概会有两篇博客吧. CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上 ...
- Libs - Blog签名
<div id="AllanboltSignature"> <p id="PSignature" style="padding-to ...