20. 绑定方法、反射
2021/11/5 23:10:14
本文主要是介绍20. 绑定方法、反射,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
绑定方法与非绑定方法
绑定方法@classmethod
将调用者本身当做第一个参数自动传入
- 绑定给对象的方法:调用者是对象,自动传入的是对象
- 绑定给类的方法:调用者是类,自动传入的是类
class Mysql: def __init__(self,ip,port): self.ip=ip self.port=port def func(self): print('%s:%s' %(self.ip,self.port)) @classmethod # 将下面的函数装饰成绑定给类的方法,传入参数时cls会自动将类的名称传入 def from_conf(cls): print(cls) return cls(settings.IP, settings.PORT) obj1=Mysql('1.1.1.1',3306) obj2=Mysql.from_conf() print(obj2.__dict__)
静态方法@staticmethod
# 封装的时候提到过 # 非绑定方法,也叫静态方法 # 没被绑定,任何人都可以调用,但是需要主动调用,不能自动传参 class Mysql: def __init__(self,ip,port): self.nid=self.create_id() self.ip=ip self.port=port @staticmethod # 将下述函数装饰成一个静态方法,类和对象都可以使用 def create_id(): import uuid return uuid.uuid4() @classmethod # 类方法 def f1(cls): pass def f2(self): pass print(Mysql.create_id) print(obj1.create_id) Mysql.create_id(1,2,3) obj1.create_id(4,5,6)
反射
反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。
python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
python中反射机制的实现很简单,提供了几个方法
内置函数hasattr、getattr、setattr、delattr的使用 ''' class Teacher: def __init__(self,name,age): self.name =name self.age =age t=Teacher('Libai',12) # hasattr(object,'name') hasattr(t,'name') # 判断有无属性t.name,返回true和false # getattr(object, 'name', default=None) getattr(t,'name',None) # 存在属性name返回属性值,不存在则返回默认值None # setattr(object, 'name', value) setattr(t,'age',18) # 设置属性值t.age=18 # delattr(object, 'name') delattr(t,'age') # 等同于del t.age,删除该属性,属性不存在时会报错
上面的属性实际上是字符串,这是有原因的,在进行交互时,计算机收到的数据一般是字符串形式,这样的设计有助于我们进行交互操作
除此之外,内置函数dir(object)能够获取类或者对象的属性列表,列表中全为字符串格式
有必要说一下学会了反射之后会有什么变化
# 学习反射之前我们如何处理判断 class User: def login(self): print('欢迎来到登录页面') def register(self): print('欢迎来到注册页面') while 1: choose = input('>>>').strip() if choose == 'login': obj = User() obj.login() elif choose == 'register': obj = User() obj.register() # 学习反射之后: class User: def login(self): print('欢迎来到登录页面') def register(self): print('欢迎来到注册页面') user = User() while 1: choose = input('>>>').strip() if hasattr(user,choose): func = getattr(user,choose) func() else: print('输入错误!!!')
这篇关于20. 绑定方法、反射的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求