面向对象绑定方法与非绑定方法及使用

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


python 在类的内部定义的函数,分类为两个大类: 一、绑定方法:绑定给谁,就应该有谁来调用,谁来调用就会把调用者当作第一个参数自动传入 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

        绑定类的方法,就是应该有类来调用:
            ![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

  • 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号,

扫描二维码关注公众号,回复: 3502610 查看本文章

例如代码如下:

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()这个方法,不依赖于类,也不依赖与对象,就是非绑定方法,就是谁都可以调用,他就是一个普通的方法;
  • 以上就是绑定类,绑定对象,非绑定方法的在各自的场景的调用;

猜你喜欢

转载自www.cnblogs.com/surewing/p/9763842.html