绑定方法和非绑定方法

绑定方法

绑定方法:绑定给谁就是给谁用

绑定到对象的方法:凡是在类中定义的函数(没有被任何装饰器修饰),都是绑定给对象用的;特点: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 Files\python.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 Files\python.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时,会自动将自身做为参数传进去

posted @ 2017-07-07 16:57  Sun珊珊来迟  阅读(147)  评论(0编辑  收藏  举报