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

    标签(空格分隔): 绑定方法与非绑定方法


    在类的内部定义的函数,分类为两个大类:
    一、绑定方法:绑定给谁,就应该有谁来调用,谁来调用就会把调用者当作第一个参数自动传入
        1.绑定到对象的方法:
            在类内部定义的,没有被装饰器修饰的
        例如:
        ``` python
        class Foo:
            def __init__(self,name):
                self.name=name
            def tell(self):  #第一个参数是对象                                 print('mingzi%s'%self.name)
        f = Foo('egon')
        print(Foo.tell())
        ```
        2.绑定到类的方法:在类内定义的装饰器classmateod修饰的方法;
        ``` python
            在类的内部定义的函数,分类为两个大类:
            一、绑定方法:绑定给谁,就应该有谁来调用,谁来调用就会把调用             者当作第一个参数自动传入
                1.绑定到对象的方法:
                在类内部定义的,没有被装饰器修饰的
                例如:
        ``` python
        class Foo:
            def __init__(self,name):
                self.name=name
            def tell(self):  #第一个参数是对象                 print('mingzi%s'%self.name)
            @classmethod
            def func(cls):#类方法,就是把类当做第一个参数
                print(cls)
        f = Foo('egon')
        print(Foo.tell())
        print(Foo.func)
        ```
        执行(print(Foo.func))的结果:
        ![image.png-189.6kB][1]
    
                绑定类的方法,就是应该有类来调用:
                    ![image.png-246.8kB][2]
                    
        
        
    二、非绑定方法:
            没有自动传值这么一说,
        非绑定方法:不与类或者对象绑定,(谁都可以用,就普通一个函数)
     ``` python
        class Foo:
            def __init__(self,name):
                self.name=name
            def tell(self):  #第一个参数是对象                 print('mingzi%s'%self.name)
            @classmethod
            def func(cls):#类方法,就是把类当做第一个参数
                print(cls)
            @staticmethod
            def func1(x,y):
                return x+y
                
        f = Foo('egon')
        print(Foo.tell())
        print(Foo.func)
    
    ![image.png-240.6kB][3]
    

    tell(self):这是对象的方法;
    @classmethod
    func(cls):这是类的方法
    @staticmethod
    def func1(x,y):这是非绑定方法

    总结:在类内部,定义的方法分为:2大类:
    1.绑定方法:
    在类内部,什么都不加的直接:tell(self):这是绑定对象的方法,这种方法,只有对象可以调用
    在类内部:@classmethod,这就是类绑定的方法,这种方法,只有类可以调用
    2.非绑定的方法:
    在类内部:@staticmethod这种方法,类和对象都可以调用,其实这个方法就是一个普通的方法,只是方法上边加了:@staticmethod,这种就是类里面的非绑定方法,类和对象都可以用;

    绑定与非绑定的使用:

    目的:

    1.主要学习,什么情况下用绑定,什么用非绑定;

    例子

    clall 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('egon',18,'male')
    

    总结上述:

    • 绑定给对象,就应该有对象来调用,自动将对象本身当做第一个参数传入

    需求2:
    如果我们现在建立一个配置文件:settings.py,需求要求你在实例化的时候从配置文件里面读取配置来实例化;

    例如setting.py

    name='wang'
    age=18
    sex='female'
    

    然后开始程序编写;

    import settings
    settings.name
    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))
        @classmathod
        def from_conf(cls):#从配置文件读取,然后读配置
            obj=cls(
                settings.name,
                settings.age,
                settings.sex
            )
            return obj
    
    • 绑定给类,就应该由类来调用自动将对象本身当做参数传入:
      p=People.from_conf()
      p.tell_info()

    以上就是通过配置文件,实例化;

    例如;
    上边每个人加个新的身份证号,就是说每个人有一个新的ID号,

    例如代码如下:

    import settings
    import hashlib
    import time
    
    settings.name
    class People:
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
            self.id=
        def tell_info(self):
            print('Name :%s Age:%s Sex:%s'                 %(self.name,self.age,self.sex))
        @classmathod
        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()
    
    • 总结:
      以上:reate_id()这个方法,不依赖于类,也不依赖与对象,就是非绑定方法,就是谁都可以调用,他就是一个普通的方法;
    • 以上就是绑定类,绑定对象,非绑定方法的在各自的场景的调用;
  • 相关阅读:
    STM32 F4 DAC DMA Waveform Generator
    STM32 F4 General-purpose Timers for Periodic Interrupts
    Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式
    Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
    查看SQL Server服务运行帐户和SQL Server的所有注册表项
    Pycharm使用技巧(转载)
    SQL Server 2014内存优化表的使用场景
    Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和输入流 捕获sys.exit()调用 optparse argparse
    Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
    Python第六天 类型转换
  • 原文地址:https://www.cnblogs.com/surewing/p/9763842.html
Copyright © 2011-2022 走看看