一.绑定方法与非绑定方法python
1.绑定方法
'''
绑定方法:绑定给谁就是给谁用的
1.凡是类中的方法和函数,都是绑定给对象使用的;ide
2.绑定方法都有自动传值的功能。传递进去的值,就是对象自己。函数
3.若是类想调用绑定方法,就必须遵循函数的参数规则,有几个参数,就必须传递几个参数。工具
绑定到对象的方法:
定义:凡是在类中定义的函数(没有被任何装饰器修饰),都是绑定给对象的,
给谁用:给对象用
特色:obj.bar() 自动把obj当作第一个参数传入,由于bar中的逻辑就是要处理obj
绑定到类的方法:
定义:在类中定义的,被@classmethod装饰的函数就是绑定到类的方法
给谁用:给类用
特色:类.class_method() 自动把类当作第一个参数传入,由于class_method中的逻辑就是要处理类
'''
class People: def __init__(self,name): self.name=name def bar(self): print('--->',self.name) @classmethod def func(cls): --------->绑定类的方法,默认为cls print(cls) f=People('egon') # print(People.func) ####绑定给类 # print(f.bar) ####绑定给对象的 # People.func() # f.func()
#####绑定类的方法 class MySQL: def __init__(self,ip,port): self.ip=ip self.port=port @classmethod ---->绑定到类的方法方便咱们直接产生MYSQL对象,以 def from_conf(cls): #便于咱们设置相应的条件来控制 import settings ##settings.py文件里存放IP与地址 obj=cls(settings.ip,settings.port) #obj=MySQL('1.1.1.1',8080) obj.x=111111111111111111111111111111111 return obj # m=MySQL('127.0.0.1',8080) obj=MySQL.from_conf() print(obj.ip) print(obj.port) print(obj.x)
2.非绑定方法spa
非绑定方法就是一个函数,就是一个工具而已,不须要类,也不须要对象,没有自动传值这么一说.3d
在面向对象中实现,就是 @staticmethodcode
import hashlib import time import pickle import os student_path=r'C:\Users\Administrator\PycharmProjects\python5期\day22\student' class People: def __init__(self,name,sex,user_id): self.name=name self.sex=sex self.user_id=user_id self.id = self.create_id() def tell_info(self): print(''' --------%s info-------- id:%s name:%s sex:%s user_id:%s ''' %(self.name,self.id,self.name,self.sex,self.user_id)) def create_id(self): m=hashlib.md5() m.update(self.name.encode('utf-8')) m.update(self.sex.encode('utf-8')) m.update(str(self.user_id).encode('utf-8')) return m.hexdigest() def save(self): with open(self.id,'wb') as f: pickle.dump(self,f) @staticmethod #非绑定方法,就是一个函数,就是一个工具而已,不须要类,也不需对象 def get_all(): res = os.listdir(student_path) for item in res: file_path=r'%s\%s' %(student_path,item) with open(file_path,'rb') as f: obj=pickle.load(f) obj.tell_info() # print(People.get_all) # # p=People('egon','male',123123123) # print(p.get_all)