9绑定方法与非绑定方法

定义:
在类内部定义的函数,分为两大类:
一:绑定方法:绑定给谁,就应该由谁来调用,谁调用就会把调用这当做第一参数自动传入
绑定到对象方法:在类内定义的没有被任何装饰器修饰的

绑定到类发方法:在类内定义的没有被装饰器classmethod修饰的方法

二:非绑定方法:没有自动传值这么一说,就类中定义一个普通函数,对象和类都可以使用
非绑定方法:不与类或者对象绑定

'''

class Foo:
def __init__(self,name):
self.name=name

def tell(self):
print('名字是%s'%self.name)

@classmethod
def func(cls):
print(cls)

@staticmethod #对象和类都可以使用
def func1(x,y):
print(x+y)



f=Foo('egon')
#
# #print(f.tell)
# print(Foo.func)
# Foo.func()

Foo.func1(1,2) #加classmethod绑定到类,用类调用
f.func1(1,5)

应用:
import settings
import hashlib
import time
class People:
def __init__(self,name,age,sex):
self.id=self.create_id()
self.name=name
self.age=age
self.sex=sex

def tell_info(self): #绑定到对象的方法
print('name:%s age:%s sex:%s' %(self.name,self.age,self.sex))

@classmethod #绑定到对象的方法
def from_conf(cls):
obj=cls(
settings.name,
settings.age,
settings.sex
)
return obj

@staticmethod #非绑定方法
def create_id():
m=hashlib.md5(str(time.time()).encode('utf-8'))
return m.hexdigest()
#p=People('EGON',18,'male')
#绑定给对象,就应该由对象来调用,自动将对象本身作为第一个个参数传入
#p.tell_info()


#绑定给类,就应该由对象来调用,自动将对象本身做第一个参数传入
# p=People.from_conf()
# p.tell_info()

#非绑定方法,不与类或者对象绑定,谁都可以调用,没有自动传值一说

p1=People('egon',18,"male")
p2=People('egon',28,"male")
p3=People('egon',38,"male")
print(p1.id)
print(p2.id)
print(p3.id)
 
原文地址:https://www.cnblogs.com/sunny666/p/9661338.html