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

    绑定方法与非绑定方法的介绍

    在类内部定义的函数,分为两大类

    一、绑定方法:绑定给谁,就应该由谁来调用,谁来调用就会把调用者当作第一个参数自动传入
    绑定到对象的方法:在类内定义的没有被任何装饰器修饰的

    绑定到类的方法:在类内部定义的被装饰器classmethod装饰的方法

    二、非绑定方法:没有自动传值这一说了,就是类中定义的一个普通函数,对象和类都可以使用
    非绑定方法:不与类或者对象绑定
    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("egon")
    
    # print(Foo.func)
    # Foo.func()
    
    # print(Foo.func1)
    # print(f.func1)
    
    Foo.func1(1,2) # 类使用
    f.func1(1,3)  # 对象使用

    绑定方法与非绑定方法的使用

    原则:根据函数体的逻辑来确定传的参数

    import settings
    import hashlib
    import time
    
    class Peeple:
        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" % (self.name,self.age))
    
        @classmethod
        def from_conf(cls):  # 定义一个外部传入文件的功能,需要绑定到类
            obj = cls(
                settings.name,
                settings.age,
                settings.sex
            )
            return obj
    
        @staticmethod
        def create_id():  #定义一个获取ID的功能,属于普通函数,不需要绑定方法
            m = hashlib.md5(str(time.time()).encode("utf-8"))
            return m.hexdigest()
    
    
    #p = Peeple("egon",19,"male")
    
    #绑定给对象,就应该由对象来调用,自动将对象本身当作第一个参数传入
    #p.tell_info()
    
    #绑定给类,就应该由类来调用,自动将类本身当作第一个参数传入
    #p = Peeple.from_conf()
    #p.tell_info()
    
    #非绑定方法,不与类或者对象绑定,谁都可以调用,没有自动传值一说
    p1 = Peeple("egon1",19,"male")
    p2 = Peeple("egon2",20,"male")
    p3 = Peeple("egon3",21,"male")
    
    print(p1.id)
    print(p2.id)
    print(p3.id)
  • 相关阅读:
    Salesforce学习笔记(一)
    踏上Salesforce的学习之路(二)
    踏上Salesforce的学习之路(一)
    Salesforce注册开发者账号
    ubuntu下安装rtl8811cu/rtl8821cu网卡 Tplink WDN5200H网卡
    基于JRebel开发的MySQL Explain插件
    Logback配置解析
    基于springboot实现http响应异常信息国际化
    高并发场景下请求合并的实践
    后台开发常用mysql语句_v1.0
  • 原文地址:https://www.cnblogs.com/nanjo4373977/p/12187748.html
Copyright © 2011-2022 走看看