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)
    

      

      

  • 相关阅读:
    【C++日常】C++动态命名变量名
    两个整数相除
    Jsp页面跳转 接收时的乱码问题
    Reverse a singly linked list
    Java处理excel文件
    Navicat for mysql 破解
    EasyUi 分页 和 表格数据加载
    Spring 框架下Controller 返回结果在EasyUI显示
    svn ubuntu command(转载)
    Shiro Security
  • 原文地址:https://www.cnblogs.com/fantsaymwq/p/9919282.html
Copyright © 2011-2022 走看看