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

    绑定方法与非绑定方法:

    #一绑定方法:@classmethod
    # 绑定给类用,默认传的第一个参数是类,其实对象也可调用,但仍将类当作第一个参数传入
    # 绑定到类的参数方法,类中的函数,加装饰器的是绑定给类使用的
    class Foo:
        def __init__(self,name):
            self.name = name
    
        def tell_info(self):
            print('名字是%s' % self.name)
    
        @classmethod    #加这个之后就绑定到类,意味着类可以直接调用.
        def func(cls): #
            print(cls,' 打印可以看出是绑定到类的') #加上@classmethod作用只是用于被他装饰的函数
    
    f  = Foo('egon')
    Foo.func() #<class '__main__.Foo'>  打印可以看出是绑定到类的
    # Foo.tell_info()  #你看tell_info函数没有加装饰器,没有绑定到类,不能直接通过类名去访问
    f.tell_info() #要通过对象去访问,实例化后的对象访问
    

    二 非绑定方法@staticmethod装饰的方法,不管谁来调用,都没有自动传值一说

    class Foo1:
        def __init__(self,name):
            self.name = name
    
        def tell_info(self):
            print('名字是%s' % self.name)
    
        @staticmethod #非绑定,谁都不绑定,谁都可以用,谁用谁传值,相当于是普通函数
        def func1(x,y): #作用于这一个函数,如果想作用于其他函数,就在其他函数的上面加装饰器
            print(x + y)
    
    f  = Foo1('egon')
    
    Foo1.func1(1,2)# 类来调用,需要传参数进去
    f.func1(1,3)# 对象来调用,需要穿参数
    

    在类内部创建的方法(函数)默认是绑定到对象的,绑定到对象,所以对象可以直接调用

    在类内部函数加装饰器的@classmethod,就指定为绑定到类的,所以类可以直接调用.

    在类内部函数加装饰器@staticmethod,即为非绑定方法,谁都没有绑定,谁都可以调用,就一普通函数,所以谁用谁传值

  • 相关阅读:
    JS——jquery UI
    js——正则表达式
    jsonp——使用公共接口获取数据
    JS——json、ajax、jsonp
    [HNOI2011]括号修复 / [JSOI2011]括号序列
    [HNOI 2016] 树
    luogu_P3313 [SDOI2014]旅行
    无旋Treap模板
    [CF 718C] Sasha and Array
    [洛谷 P4556] 雨天的尾巴
  • 原文地址:https://www.cnblogs.com/sunny7/p/9715835.html
Copyright © 2011-2022 走看看