绑定方法与非绑定方法
Posted sunny666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绑定方法与非绑定方法相关的知识,希望对你有一定的参考价值。
定义:
在类内部定义的函数,分为两大类:
一:绑定方法:绑定给谁,就应该由谁来调用,谁调用就会把调用这当做第一参数自动传入
绑定到对象方法:在类内定义的没有被任何装饰器修饰的
绑定到类发方法:在类内定义的没有被装饰器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)
以上是关于绑定方法与非绑定方法的主要内容,如果未能解决你的问题,请参考以下文章