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 ...
随机推荐
- React 创建一个自动跟新时间的组件
componentDidMount声明周期函数 表示组件渲染完成后 componentWillUnmount声明周期函数 组件将要卸载 通常用于(为了防止内存泄漏 清除定时器) 11==>创建组 ...
- oracle中utl_raw
RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节.LONG RAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变 ...
- 反射(hasattr和getattr和setattr和delattr)
目录 一.反射在类中的使用 1.1 应用 二.反射在模块中的使用 2.1 前言 2.2 反射机制 2.2.1 getattr() 2.2.2 hasattr(object, name) 2.2.3 s ...
- CMake使用总结(一)
当我们在写CMakeLists.txt文件时,常常会搞不明白link_directories, LINK_LIBRARIES, target_link_libraries这3者的区别,下面就其详细介绍 ...
- python服务不能在docker容器里运行的问题
在开发过程中,我们将mysql.redis.celery等服务在docker容器里跑,项目在本地运行,便于debug调试 docker-compose -f docker-compose-dev.ym ...
- 跳出"低水平勤奋陷阱"
"低水平勤奋陷阱":摘记更多的知识 读书是获得知识的最基本,最重要的方式,但读书需要方法 所谓"低水平勤奋陷阱",就是花费了大量的时间和精力,但得到的结果却微乎 ...
- ubuntu 库依赖问题
安装apt-file, 可以查找各种库依赖的文件,或查找某个app的依赖库: sudo apt install apt-file apt-file update apt-flie search rpc ...
- vue项目中引入iconfont
背景 对于前端而言,图标的发展可谓日新月异.从img标签,到雪碧图,再到字体图标,svg,甚至svg也有了类似于雪碧图的方案svg-sprite-loader.雪碧图没有什么好讲的了,只是简单地利用了 ...
- 【趣学程序】Linux上安装Tengine(Nginx)
linux 安装tengine tengine是什么 tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳 ...
- WPF自定义控件的制作
因为有时候需要定制化的控件,需要多个控件的组合及复杂功能的集成,这样可以考虑自定义用户控件.下面分享一个简单的数值增减功能的自定义控件作为说明. 效果图如下: 1.创建自定义用户控件(添加->新 ...