• 绑定方法与非绑定方法


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

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

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

    绑定到类的方法:在类内部定义的被装饰器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)
  • 相关阅读:
    常用的正则表达式
    VScode格式化代码,开启ESlint代码检测方法,eslint代码配置
    git 常用的操作
    vscode 格式化的时候自动添加分号怎么去除
    echarts渐变色实现方法
    echart 柱状图 数值较小的时候,文字显示不全
    iview的Modal在提交表单时确认按钮loading状态冲突问题解决方案
    vue.js动态获取菜单
    12.18 webSocket消息推送
    12.18 微信模板消息推送
  • 原文地址:https://www.cnblogs.com/nanjo4373977/p/12187748.html
Copyright © 2020-2023  润新知