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

Posted GraceZen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象——绑定方法与非绑定方法相关的知识,希望对你有一定的参考价值。

1 在类内部定义的函数,分为两大类
2 一:绑定方法:绑定给谁,就应该由谁来调用,谁来调用就会把调用者当做第一个参数自动传入
3     绑定到对象的方法:在类内定义的没有被任何装饰器修饰的
4     绑定到类的方法:在类内定义的被装饰器classmethod修饰的方法
5 二:非绑定方法(staticmethod):没有自动传值这么一说,就是类中定义的一个普通函数,对象和类都能使用
6     非绑定方法:不与类或者对象绑定,谁都可以调用,参数该怎么传就怎么传
技术分享图片
 1 class Foo:
 2     def __init__(self,name):
 3         self.name = name
 4     def tell(self):
 5         print("名字是%s"%self.name)
 6     @classmethod  #绑定到类的方法,类在使用时会将类本身当作参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入)
 7     def func(cls):#cls = Foo
 8         print(cls)
 9     @staticmethod  # 非绑定方法,不与类或对象绑定,谁都可以调用,,没有自动传值效果,就是普通函数
10     def func1(x,y):
11         print(x+y)
12 f = Foo(egon)
13 # print(Foo.tell)#<function Foo.tell at 0x0000000001E750D0>
14 # print(f.tell)#<bound method Foo.tell of <__main__.Foo object at 0x0000000001E6ACC0>>
15 # print(Foo.func)#<bound method Foo.func of <class ‘__main__.Foo‘>>
16 # print(f.func)#<bound method Foo.func of <class ‘__main__.Foo‘>>
17 
18 # print(Foo.func1)#<function Foo.func1 at 0x00000000027A5488>
19 # print(f.func1)#<function Foo.func1 at 0x00000000027A5488>
20 # Foo.func1(1,2)#3
21 # f.func1(1,2)#3
示例
技术分享图片
 1 import settings,time,hashlib
 2 #settings存储人员信息
 3 class People:
 4     def __init__(self,name,age,sex):
 5         self.id = self.creat_id()
 6         self.__name = name
 7         self.__age = age
 8         self.__sex = sex
 9     @property
10     def tell_info(self):
11         print(Name:%s Age:%s Sex:%s %(self.__name,self.__age,self.__sex))
12     @classmethod
13     def from_conf(cls):#cls = People
14         obj = cls(
15             settings.name,
16             settings.age,
17             settings.sex
18         )
19         return obj
20     @staticmethod
21     def creat_id():
22         m = hashlib.md5(str(time.time()).encode(utf-8))
23         return m.hexdigest()
24 #绑定给类,就应该由类来调用,自动将类本身当作第一个参数传入
25 p = People.from_conf()
26 #绑定给对象,就应该由对象来调用,自动将对象本身当作第一个参数传入
27 p.tell_info #Name:grace Age:20 Sex:femal
28 print(p.id)#54346551b06e6c324dcc5a940bdef09c
29 #非绑定方法,不与类或者对象绑定,谁都可以调用,没有自动传值一说
30 p1 = People(egon,18,male)
31 p1.tell_info#Name:egon Age:18 Sex:male
32 print(p1.id)#54346551b06e6c324dcc5a940bdef09c
应用

 

以上是关于面向对象——绑定方法与非绑定方法的主要内容,如果未能解决你的问题,请参考以下文章

python-面向对象(绑定方法与非绑定方法)

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

三 面向对象之绑定方法与非绑定方法

面向对象编程(类的绑定方法与非绑定方法)

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

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