绑定方法
1.绑定给类的方法(classmethod)
@classmethod是一个装饰器,起作用就是声明下面的函数是绑定给类的,可用 类.函数名 来进行调用即绑定到类。类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入),python为我们内置了函数classmethod来把类中的函数定义成类方法。
#settings.py
# HOST='127.0.0.1'
# PORT=3306
# DB_PATH=r'C:\Users\Administrator\PycharmProjects\test\面向对象编程\test1\db'
import settings
class MySQL:
def __init__(self,host,port):
self.host=host
self.port=port
@classmethod
def from_conf(cls):
print(cls)
return cls(settings.HOST,settings.PORT)
print(MySQL.from_conf) #<bound method MySQL.from_conf of <class '__main__.MySQL'>>
mysql=MySQL.from_conf() #将settings中内容作为参数,传入类MYSQL中 ,相等于执行from_conf(MYSQL)
print(mysql.host and mysql.port)
<bound method MySQL.from_conf of <class '__main__.MySQL'>>
# <class '__main__.MySQL'>
# 3306
2.绑定到对象的方法:没有被任何装饰器装饰的方法。
就是在实例化对象后,直接调用类中的函数和属性
非绑定方法
非绑定方法:用@staticmethod装饰器装饰的方法。statimethod不与类或对象绑定,谁都可以调用,没有自动传值效果。
注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说。
import hashlib
import time
class Mysql :
def __init__(self,host,post):
self.host=host
self.post=post
self.id=self.create_id()
@staticmethod
def create_id():
m=hashlib.md5(str(time.time()).encode('utf-8'))
return m.hexdigest()
mysql=Mysql('127.1.1.0',3308)
print(Mysql.create_id())
print(mysql.create_id())
print(mysql.id)
# eace12deda949739c083c113981e0873
# eace12deda949739c083c113981e0873
# eace12deda949739c083c113981e0873