爱陪小樱桃

导航

 

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


在类的内部定义的函数,分类为两个大类:
一、绑定方法:绑定给谁,就应该有谁来调用,谁来调用就会把调用者当作第一个参数自动传入
    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()这个方法,不依赖于类,也不依赖与对象,就是非绑定方法,就是谁都可以调用,他就是一个普通的方法;
  • 以上就是绑定类,绑定对象,非绑定方法的在各自的场景的调用;
posted on 2018-10-09 23:31  cherry小樱桃  阅读(246)  评论(0编辑  收藏  举报