首页 > 技术文章 > 3.1.9 类内部定义的函数:绑定方法与非绑定方法

beallaliu 2018-05-30 23:29 原文

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

    2. 绑定到类的方法:在类内定义的被装饰器@classmethod修饰的方法

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

说明:未做任何修饰时:在类内定义的方法是绑定给对象的,对象调用时,不需要传自己给self. 类调用类的方法时,需要传self(对象)给第一个参数。


'''

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.tell)
# Foo.tell(f)
# print(f.tell)

# f.tell()

# 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 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():
        m=hashlib.md5(str(time.time()).encode('utf-8'))
        return m.hexdigest()

# p=People('egon',18,'male')

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

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


#非绑定方法,不与类或者对象绑定,谁都可以调用,没有自动传值一说
p1=People('egon1',18,'male')
p2=People('egon2',28,'male')
p3=People('egon3',38,'male')

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

  

推荐阅读