zoukankan      html  css  js  c++  java
  • 绑定方法和非绑定方法

    绑定方法

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

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

  • 相关阅读:
    单例模式
    抽象类的作用和应用场景
    java内部类的作用
    java多线程
    IO流--与properties集合配合使用
    IO流--序列化流与反序列化流
    8 个必备的PHP功能开发
    CSS3 box-shadow:
    移动平台的meta标签-----神奇的功效
    Android Screen Monitor抓取真机屏幕
  • 原文地址:https://www.cnblogs.com/lijian-22huxiaoshan/p/7133101.html
Copyright © 2011-2022 走看看