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


    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
    应用
  • 相关阅读:
    使用纯 CSS 实现响应式的图片显示效果
    10个帮助你快速调试和排错的小技巧
    《JavaScript 实战》:JavaScript 实现拖拽缩放效果
    周末发福利了!26个免费的HTML5模版
    程序人生的四个象限和两条主线
    50份简历设计,助你找到梦寐以求的工作
    6个重构方法可帮你提升 80% 的代码质量
    开发者必须收藏的6款源码搜索引擎
    常用的20个强大的 Sublime Text 插件
    你知道吗?.NET Framework 4.5 五个很棒的特性
  • 原文地址:https://www.cnblogs.com/GraceZ/p/8081657.html
Copyright © 2020-2023  润新知