绑定方法与非绑定方法

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

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

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

绑定到类的方法:在类内部定义的被装饰器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)
原文地址:https://www.cnblogs.com/nanjo4373977/p/12187748.html