zoukankan      html  css  js  c++  java
  • 面向对象-绑定方法与非绑定方法

    在函数内部定义的函数,分绑定方法与非绑定方法

    绑定方法:绑定给谁,由谁使用,谁调用就会把谁当第一个参数传入。

      绑定到对象的方法:在类内定义的没有被任何装饰器装饰的方法。

    class Foo:
        def __init__(self,name):
            self.name=name
        def tell(self):
            print('名字是%s' % self.name)
    f=Foo('ya')
    print(Foo.tell)
    print(f.tell)

      绑定到类的方法:在类内定义的被装饰器classmethod修饰的方法,那个类使用,则将谁当第一个参数传入

    class Foo:
        def __init__(self,name):
            self.name=name
        def tell(self):
            print('名字是%s' % self.name)
        @classmethod
        def func(cls):
            print(cls)
    Foo.func()

    非绑定方法:没有自动传值动作

      不与类或对象绑定的方法,类和对象都可以使用,当普通方法使用

    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):
            return x+y
    f=Foo('ya')
    print(Foo.func1(10,10))
    print(f.func1(20,20))

     绑定与非绑定使用

    class People:
        def __init__(self,name,age,sex):
            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))
    p=People('ya','18','male')
    #绑定给对象,就应该由对象来调用,自动将对象本身当作第一个参数传入
    p.tell_info()

    绑定到类的方法,让类方法动态从配置文件中读取配置文件

    import settings
    class People:
        def __init__(self,name,age,sex):
            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
    p=People.from_conf()
    p.tell_info()

    非绑定方法,类和对象都可使用,不依赖类和对象,无需将类或对象当第一个参数传入,即没有自动传参一说,当普通方法使用即可

    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():
            #创建用户id,不依赖类与对象,谁都可以使用,没有自动传参一说
            m=hashlib.md5(str(time.time()).encode('utf-8'))
            return m.hexdigest()
    p1=People('ya','18','male')
    p2=People('ya','28','male')
    p3=People('ya','38','male')
    print(p1.id)
    print(p2.id)
    print(p3.id)

  • 相关阅读:
    reduce()、filter()、map()、some()、every()、...展开属性
    react的this.setState详细介绍
    HDU
    The 2015 ACM-ICPC Asia Beijing Regional Contest
    Ubuntu 14.04 安装 WPScan
    蓝桥杯-历届试题-公式求值
    Ubuntu下快速搭建ACdream Online Judge v1.5.3
    Codeforces Round #290 (Div. 2)
    SOJ
    SOJ
  • 原文地址:https://www.cnblogs.com/yaya625202/p/8885262.html
Copyright © 2011-2022 走看看