绑定方法
绑定方法:绑定给谁就是给谁用
绑定到对象的方法:凡是在类中定义的函数(没有被任何装饰器修饰),都是绑定给对象用的;特点:obj.bar()自动把obj当作第一个参数传入。
绑定到类的方法:在类的定义中,被classmethod装饰的函数就是绑定到类的方法;特点:类.class_method()自动把类当做第一个参数传入。
-
staticmethod
@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样
class A:
bar = 1
def foo(self):
print ('foo')
@staticmethod
def static_foo():
print('static_foo' )
print( A.bar)
A.static_foo()
b=A
b.static_foo()
"D:Program Filespython.exe" "E:/py_code/day 12/绑定方法和非绑定方法.py"
static_foo
1
static_foo
1
Process finished with exit code 0
这里的 static_foo已经没有绑定方法,就是一个简单函数,类和对象都可以进行调用。
-
classmethod
@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。
class MySQL:
def __init__(self,host,port):
self.host=host
self.port=port
@classmethod
def from_conf(cls):
print(cls)
return cls("1.2.3.4",8080)
print(MySQL.from_conf) #<bound method MySQL.from_conf of <class '__main__.MySQL'>>
conn=MySQL.from_conf()
print(conn.host,conn.port)
conn.from_conf() #对象也可以调用,但是默认传的第一个参数仍然是类
"D:Program Filespython.exe" "E:/py_code/day 12/绑定方法和非绑定方法.py"
<bound method MySQL.from_conf of <class '__main__.MySQL'>>
<class '__main__.MySQL'>
1.2.3.4 8080
<class '__main__.MySQL'>
Process finished with exit code 0
这里把def from_conf(cls)绑定给到类做为类的方法,所以当类调用from_conf时,会自动将自身做为参数传进去