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

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

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

二:非绑定方法:没有自动传值一说了,就是类中的普通工具
非绑定方法:不与类或者对象绑定 staticmethon

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

    def tell(self):  # 绑定到对象
        print('名字是 %s'%self.name)

    @classmethod  # 绑定到类(类方法)
    def func(cls):  #cls=F00
        print(cls)

    @staticmethod  #(静态方法)普通函数,类与对象都能用
    def func1(x,y):
        print(x+y)

f=Foo('egon')
f.tell()  # ---> 名字是 egon
Foo.func()

Foo.func1(1,2)
f.func1(2,3)

绑定方法与非绑定方法的应用

  

import settings
import hashlib
import time
class Pepole:
    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

    def create_id(self):
        m=hashlib.md5(str(time.time()).encode('utf-8'))
        return m.hexdigest()

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

#绑定给类,就应该由类来调用,自动将类本身当做第一参数传入
# p=Pepole.from_conf() # 从配置文件中传入的文件
# p.tell_info()
p1=Pepole('egon1',18,'male')
p2=Pepole('egon2',28,'male')
p3=Pepole('egon3',38,'male')

print(p1.id)
print(p2.id)
print(p3.id)

 

posted on 2018-12-31 10:08  赫晓蕊  阅读(123)  评论(0编辑  收藏  举报

导航