博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PYTHON-绑定方法 反射 内置函数
阅读量:6660 次
发布时间:2019-06-25

本文共 4378 字,大约阅读时间需要 14 分钟。

''' 绑定方法 类中定义函数分为了两大类:     1. 绑定方法         特殊之处: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入         如何用:             绑定给对象的方法: 在类中定义函数没有被任何装饰器修饰的情况下,默认就是绑定对象的             绑定给类的方法: 为类中定义函数添加一个装饰器classmethod,就是绑定类的     2. 非绑定方法         特殊之处: 非绑定方法就是一个普通函数,既不与类绑定又不与对象绑定,                     意味着类与对象都可以调用,但是无论谁来调用都是一个普通函数,没有自动传值效果         如何用:             非绑定方法: 为类中定义函数添加一个装饰器staticmethod,就是非绑定方法     三种方法使用:关键是看函数体的代码具体使用情况     import uuid     print(uuid.uuid4())     #一.绑定给对象的方法     # 绑定给对象的,应该由对象来调,     # obj.func1()     # print(obj)     # 绑定给对象的方法,类也可以调用,但是类调用就是一个普通函数,没有自动传值的效果     # print(obj.func1)     # print(Foo.func1)     # Foo.func1(obj)     #二.绑定给类的方法     # 绑定给类的,应该由类来调,(如用对象来调用,自动传的还是类)     # print(Foo.func2)     # print(obj.func2)     # Foo.func2()     # obj.func2()     #三.非绑定方法     # print(obj.func3)     # print(Foo.func3)     # obj.func3(1,2)     # Foo.func3(1,3) ''' ''' # class Foo: #     def func1(self): #         print('func1',self) # #     @classmethod #     def func2(cls): #         print('func2',cls) # #     @staticmethod #     def func3(x,y): #         print('func3',x,y) # # obj=Foo() # ========================== # import settings # # class MySQL: #     def __init__(self,ip,port): #         self.id=self.create_id() #         self.ip=ip #         self.port=port # #     def tell_info(self): #         print('<%s:%s:%s>' % (self.id,self.ip, self.port)) # #     @classmethod #     def from_conf(cls): #         return cls(settings.IP, settings.PORT) # #     @staticmethod #     def create_id(): #         import uuid #         return uuid.uuid4() # obj=MySQL('1.1.1.1',3306) # obj1=MySQL('1.1.1.2',3406) # obj.tell_info() # obj1.tell_info() # obj2=MySQL.from_conf() # obj2.tell_info() ''' ''' 反射     通过字符串的形式操作对象相关的属性。     python中的一切事物都是对象(都可以使用反射) 总之反射的好处就是,     可以事先定义好接口,接口只有在被完成后才会真正执行,这实现了即插即用,     这其实是一种‘后期绑定’,什么意思?     即你可以事先把主要的逻辑写好(只定义接口),然后后期再去实现接口的功能 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象)     #hasattr 判断属性或功能是否存在     # print(hasattr(obj,'name')) #obj.name     # print(hasattr(obj,'tell_info')) #obj.tell_info     #getattr 查询属性,None的位置是填默认值     # res=getattr(obj,'name') #res=obj.name     # res=getattr(obj,'xxx',None)     #setattr 更改,新增     # setattr(obj,'age',38)     # setattr(obj,'sex','male')     #delattr  删除     # delattr(obj,'name') ''' ''' # class Foo: #     def __init__(self,name,age): #         self.name=name #         self.age=age # #     def tell_info(self): #         print('%s:%s' %(self.name,self.age)) # # obj=Foo('egon练习',18) #hasattr # print(hasattr(obj,'name')) #obj.name # print(hasattr(obj,'tell_info')) #obj.tell_info #getattr # res=getattr(obj,'name') #res=obj.name # print(res) # res=getattr(obj,'xxx',None) # print(res) #setattr # setattr(obj,'age',38) # setattr(obj,'sex','male') # print(obj.__dict__) # print(obj.sex) #delattr # delattr(obj,'name') # if hasattr(obj,'xxxxe'): #     delattr(obj,'xxxxe') # print(obj.__dict__) ''' # isinstance(obj,cls)检查是否obj是否是类 cls 的对象 # issubclass(sub, super)判断是否是子类(检查sub类是否是 super 类的派生类) ''' # isinstance(obj,cls)检查是否obj是否是类 cls 的对象 # print(isinstance([],list)) #type([]) is list # class Foo: #     pass # obj=Foo() # print(isinstance(obj,Foo)) # issubclass(sub, super)判断是否是子类(检查sub类是否是 super 类的派生类) # class Foo: #     pass # # class Bar(Foo): #     pass # print(issubclass(Bar,Foo)) ''' # __str__: 会在对象被打印时自动触发,然后将返回值返回给print功能进行打印 # l=list([1,2,3]) # print(l) #(同理,定制对象的显示效果,常用!!!) # __del__: 会在对象被删除时自动触发执行,用来在对象被删除前回收系统资源 # 常用语回收 文件的关闭 ''' # __str__: 会在对象被打印时自动触发,然后将返回值返回给print功能进行打印 # class People: #     def __init__(self,name,age): #         self.name=name #         self.age=age # #     def __str__(self): #         return '<%s:%s>' %(self.name,self.age) # # peo=People('egon练习',18) # print(peo) #print(peo.__str__()) # # l=list([1,2,3]) # print(l) # __del__: 会在对象被删除时自动触发执行,用来在对象被删除前回收系统资源 # class Foo: #     def __del__(self): #         print('===>') # # obj=Foo() # # del obj # print('其他代码...') # class Bar: #     def __init__(self,x,y,filepath): #         self.x=x #         self.y=y #         self.f=open(filepath,'r',encoding='utf-8') #     def __del__(self): #         # 写回收系统资源相关的代码 #         self.f.close() # # obj=Bar(10,20) # del obj ''' # =================================(后期) # 四 二次加工标准类型(包装) # 六 描述符(__get__,__set__,__delete__) # 熟透对象后再看这两块知识: # http://www.cnblogs.com/linhaifeng/articles/6204014.html

转载于:https://www.cnblogs.com/du-jun/p/9850177.html

你可能感兴趣的文章
数据库中状态表的设计
查看>>
shell 循环
查看>>
I Have A Dream !
查看>>
运维学python之爬虫基础篇(一)开篇
查看>>
IIS优化-解决IIS访问速度慢问题
查看>>
Ubuntu安装rpm文件
查看>>
ASA远程×××
查看>>
常用各种形状的鼠标
查看>>
Java Top 100热门问答(Stackoverflow)
查看>>
Centos中ftp源代的码安装与测试
查看>>
习惯可以改,前提是主动找目标
查看>>
SQL Server 2017 AlwaysOn on Linux 配置和维护(1)
查看>>
EditPlus配置C#运行环境
查看>>
登录与注册
查看>>
我的友情链接
查看>>
JavaScrip array相关操作总结
查看>>
iframe父子页面使用
查看>>
jquery 属性操作
查看>>
(MFC)CPropertySheet的生成
查看>>
自动化运维工具Ansible的用法
查看>>