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

    在类内部定义的函数,分为两大类:
    一、绑定方法:绑定给谁,就应该由谁来调用,谁来调用就会把调用者当作第一个参数自动传入
          a、绑定到对象的方法:在类内部定义的没有内任何装饰器修饰的
          b、绑定到类的方法:在类内部定义的被装饰器classmethod修饰的
    二、非绑定方法:没有自动传值,就是类中定义的一个普通工具,对象和类都可以使用 (被装饰器staticmethod修饰)

          非绑定方法:不与类或者对象绑定(类和对象都可用)。

    class Foo:
        def __init__(self,name):
            self.name = name
    
        def tell(self):     # 类内部定义的函数是绑定给对象使用的
            print("名字是%s" %self.name)
    
        @classmethod
        def func(cls):    # cls = Foo
            print(cls)
    
        @staticmethod
        def func1(x,y):
           print(x+y)
    
    
    f = Foo("alex")
    # # print(Foo.tell)
    # # Foo.tell(f)
    # # print(f.tell)    # 绑定方法的特殊之处是绑定给谁就由谁来调用,自动传入第一个参数
    #
    # print(Foo.func)
    # Foo.func()
    # print(Foo)
    
    
    print(Foo.func1)
    print(f.func1)
    
    Foo.func1(1,2)
    f.func1(1,3)

    使用场景

    import settings,hashlib,time
    class People:
        def __init__(self,name,age,sex):
            self.id = self.create_id()
            self.name = name
            self.age = age
            self.sex = sex
    
        def tell_info(self):       # 绑定到对象的方法
            print("Name:%s,Age:%s,Sex:%s"%(self.name,self.age,self.sex))
    
        @classmethod
        def from_conf(cls):
            obj = cls(
                settings.name,
                settings.age,
                settings.sex
            )
            return obj
    
        @staticmethod
        def create_id():
            m = hashlib.md5(str(time.time()).encode("utf-8"))
            return m.hexdigest()
    
    
    # p = People("alex",18,"male")
    # # 绑定给对象,就应该由对象来调用,自动将对象本身当作第一个参数传入
    # p.tell_info()    #tell_info(p)
    
    # # 绑定给类,就应该由类来调用,自动将类本身当作第一个参数传入
    # p = People.from_conf()    # from_conf(People)
    # p.tell_info()
    
    # 非绑定方法,不与类或对象绑定,谁都可以调用,没有自动传值一说
    p1 = People("alex1",18,"male")
    p2 = People("alex2",28,"male")
    p3 = People("alex3",38,"male")
    print(p1.id)
    print(p2.id)
    print(p3.id)
    

      

      

  • 相关阅读:
    Mac开发者常用的工具
    10个常见的缓存使用误区
    果壳摘选
    WPF 无缝图片滚动
    WinForm 子线程修改主线程(UI线程)
    如何在WinForm中发送HTTP请求
    新闻接口调用之新浪滚动新闻
    使用json-lib进行Java和JSON之间的转换
    转载 一位程序员的妻子讲述她老公教给她了什么
    sae 上传文件 java实现
  • 原文地址:https://www.cnblogs.com/fantsaymwq/p/9919282.html
Copyright © 2011-2022 走看看