zoukankan      html  css  js  c++  java
  • 9绑定方法与非绑定方法

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

    绑定到类发方法:在类内定义的没有被装饰器classmethod修饰的方法

    二:非绑定方法:没有自动传值这么一说,就类中定义一个普通函数,对象和类都可以使用
    非绑定方法:不与类或者对象绑定

    '''

    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):
    print(x+y)



    f=Foo('egon')
    #
    # #print(f.tell)
    # print(Foo.func)
    # Foo.func()

    Foo.func1(1,2) #加classmethod绑定到类,用类调用
    f.func1(1,5)

    应用:
    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()


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

    #非绑定方法,不与类或者对象绑定,谁都可以调用,没有自动传值一说

    p1=People('egon',18,"male")
    p2=People('egon',28,"male")
    p3=People('egon',38,"male")
    print(p1.id)
    print(p2.id)
    print(p3.id)
     
  • 相关阅读:
    《一线架构师》之Refined Architecture阶段
    可修改性战术分析
    上周学习总结
    软件质量属性之可修改性
    《信息领域热词分析》实现六种质量属性
    质量属性的六个常见属性应用场景(淘宝篇)
    软件架构师如何工作
    信息领域热词分析
    结合ssh谈MVC架构模式
    PythonCPPJava的异同
  • 原文地址:https://www.cnblogs.com/sunny666/p/9661338.html
Copyright © 2011-2022 走看看