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

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

目录:

  

  

  

绑定与非绑定方法:

类中定义函数分为了两大类:    1. 绑定方法        特殊之处: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入        绑定给对象的方法: 在类中定义函数没有被任何装饰器修饰的情况下,默认就是绑定对象的        绑定给类的方法: 为类中定义函数添加一个装饰器classmethod,就是绑定类的    2. 非绑定方法        特殊之处: 非绑定方法就是一个普通函数,既不与类绑定又不与对象绑定,意味着类与对象都可以调用,但是无论谁来调用都是一个普通函数,没有自动传值效果        非绑定方法: 为类中定义函数添加一个装饰器staticmethod,就是非绑定方法

 示例代码:

class Foo:    # 绑定对象    def func1(self):        print('func1',self)    # 绑定类    @classmethod    def func2(cls):        print('func2',cls)    # 非绑定方法,必须明确加staticmethod    @staticmethod    def func3(x,y):        print('func3',x,y)obj=Foo()

一:绑定给对象的方法

#绑定给对象的,应该由对象来调,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)

  两种方法,三种情况:具体使用绑定方法还是非绑定方法要根据函数代码确定

 
settings.pyIP='10.10.0.11'PORT=3307
import settingsclass 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)    #生成ID,不需要传值,非绑定方法    @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()

反射:通过字符串来操作属性

定义类:

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)

四个方法:

1 #hasattr,判断是否有该属性 2 print(hasattr(obj,'name')) #obj.name 3 print(hasattr(obj,'tell_info')) #obj.tell_info 4  5 #getattr,获得属性 6 res=getattr(obj,'name') #res=obj.name 7 print(res) 8 res=getattr(obj,'age',None)#第三个参数 用来防止报错 9 print(res)10 11 #setattr,改或者增加属性12 setattr(obj,'age',38)13 setattr(obj,'sex','male')14 print(obj.__dict__)15 print(obj.sex)16 17 #delattr,删除属性18 delattr(obj,'name')19 delattr(obj,'age')20 if hasattr(obj,'xxxxe'):21     delattr(obj,'xxxxe')22 print(obj.__dict__)

内置方法:

判断是否为对象或子类:

# isinstance()判断是否是某个类的实例print(isinstance([],list)) #type([]) is list  Trueclass Foo:    pass obj=Foo()print(isinstance(obj,Foo))#True# issubclass()判断是否是某个类的子类class Foo:    passclass Bar(Foo):    pass print(issubclass(Bar,Foo) 

__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)#调用了内部的__str__方法

__del__: 会在对象被删除时自动触发执行,用来在对象被删除前回收系统资源

1 class Foo: 2     def __del__(self): 3         print('===>') 4 obj=Foo() 5 del obj 6 print('其他代码...') 7 # ===> 8 # 其他代码... 9 10 -----------------------11 class Foo:12     def __del__(self):13         print('===>')14 obj=Foo()15 print('其他代码...')16 # 其他代码...17 # ===>18 # 程序结束的时候会自动调用__del__方法,19 20 -----------------------------------------21 class Bar:22     def __init__(self,x,y,filepath):23         self.x=x24         self.y=y25         # 打开一个文件,没有关闭26         self.f=open(filepath,'r',encoding='utf-8')27     def __del__(self):28         # 写回收系统资源相关的代码,在程序结束时自动执行.从而关闭文件29         self.f.close() 3031 obj=Bar(10,20,r'G:\filename')32 del obj

 

转载于:https://www.cnblogs.com/xuechengeng/p/9850365.html

你可能感兴趣的文章
Workpress搭建经验 (ubuntu16.04+nginx+mysql+php7)
查看>>
Java List详解
查看>>
选择排序SelectSort
查看>>
一个案例深入Python中的__new__和__init__
查看>>
链接,光标,DHTML,缩放
查看>>
Flask博客类登录注册验证模块代码(十四)
查看>>
LFS、BLFS、ALFS、HLFS的区别
查看>>
Java的MD5加密和解密
查看>>
Unity3D接入移动MM支付SDK(强联网)的问题
查看>>
Accepting PayPal in games(完整的Paypal在Unity的支付)
查看>>
css
查看>>
Android无线测试之—UiAutomator UiDevice API介绍五
查看>>
Ruby中的include
查看>>
shell脚本报错:-bash: xxx: /bin/bash^M: bad interpreter: No such file or directory
查看>>
SQLServer创建用户登录
查看>>
Python基础---容器列表List
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
基础SQL汇总
查看>>
2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null
查看>>
MSMQ的简单使用
查看>>