[Python3]绑定方法与非绑定方法

绑定方法与非绑定方法

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

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

    二:非绑定方法:没有自动传值,就是类中定义的一个普通的工具,类和对象都可以使用
        非绑定方法:不与类或者对象绑定
                  用staticmethod装饰器装饰的方法

class Foo:
    def __init__(self, name):
        self.name = name

    def tell(self):
        print('名字是%s' % self.name)
    @classmethod
    def func(cls):
        print(cls)
    @staticmethod
    def func1(x, y):
        print(x + y)

绑定方法和非绑定方法的应用。

依据函数体的逻辑来决定函数是绑定方法还是非绑定方法

import hashlib
import time
import settings
class People:
    def __init__(self, name, age, sex):
        self.id = self.creat_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 creat_id():         # 非绑定方法
        m = hashlib.md5(str(time.time()).encode('utf-8'))
        return m.hexdigest()

# p = People('wyq', 18, 'male')
# 绑定给对象,就应该由对象来调用,自动将对象本身当做第一个参数传入
# p.tell_info()
# 绑定给类,就应该由类来调用,自动将类本身当做第一个参数传入
# p = People.from_conf()
# p.tell_info()

# 非绑定方法,不与类或者对象绑定,谁都可以调用,没有自动传值
# p1 = People('wyq', 18, 'male')
# p2 = People('yqw', 19, 'male')
# p3 = People('qyw', 20, 'male')
# 
# print(p1.id)
# print(p2.id)
# print(p3.id)

猜你喜欢

转载自blog.csdn.net/TynMhxx/article/details/81811150