面向对象-绑定方法与非绑定方法

时间:2022-11-13 17:20:47

在函数内部定义的函数,分绑定方法与非绑定方法

绑定方法:绑定给谁,由谁使用,谁调用就会把谁当第一个参数传入。

  绑定到对象的方法:在类内定义的没有被任何装饰器装饰的方法。

class Foo:
    def __init__(self,name):
        self.name=name
    def tell(self):
        print('名字是%s' % self.name)
f=Foo('ya')
print(Foo.tell)
print(f.tell)

面向对象-绑定方法与非绑定方法

  绑定到类的方法:在类内定义的被装饰器classmethod修饰的方法,那个类使用,则将谁当第一个参数传入

class Foo:
    def __init__(self,name):
        self.name=name
    def tell(self):
        print('名字是%s' % self.name)
    @classmethod
    def func(cls):
        print(cls)
Foo.func()

面向对象-绑定方法与非绑定方法

非绑定方法:没有自动传值动作

  不与类或对象绑定的方法,类和对象都可以使用,当普通方法使用

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):
        return x+y
f=Foo('ya')
print(Foo.func1(10,10))
print(f.func1(20,20))

面向对象-绑定方法与非绑定方法

 绑定与非绑定使用

class People:
    def __init__(self,name,age,sex):
        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))
p=People('ya','18','male')
#绑定给对象,就应该由对象来调用,自动将对象本身当作第一个参数传入
p.tell_info()

面向对象-绑定方法与非绑定方法

绑定到类的方法,让类方法动态从配置文件中读取配置文件

import settings
class People:
    def __init__(self,name,age,sex):
        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
p=People.from_conf()
p.tell_info()

面向对象-绑定方法与非绑定方法

非绑定方法,类和对象都可使用,不依赖类和对象,无需将类或对象当第一个参数传入,即没有自动传参一说,当普通方法使用即可

import settings
import hashlib
import time
class People:
    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 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 create_id():
        #创建用户id,不依赖类与对象,谁都可以使用,没有自动传参一说
        m=hashlib.md5(str(time.time()).encode('utf-8'))
        return m.hexdigest()
p1=People('ya','18','male')
p2=People('ya','28','male')
p3=People('ya','38','male')
print(p1.id)
print(p2.id)
print(p3.id)

面向对象-绑定方法与非绑定方法