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)
  • 相关阅读:
    ....
    排序相关的问题(jq,java)_1123
    Spring aop 记录操作日志
    vue -element ui 自定义验证规则,封装在公共的文件里
    vue
    ES6 新特性
    正则表达式
    面向对象基础--继承(2)
    面向对象基础(1)
    安装vue环境
  • 原文地址:https://www.cnblogs.com/nanjo4373977/p/12187748.html
Copyright © 2011-2022 走看看