zoukankan      html  css  js  c++  java
  • 绑定方法和非绑定方法(静态方法)

    绑定方法和非绑定方法

    一、绑定方法

    绑定方法其实就是类中的函数,绑定给谁,由谁来调用,就是谁的绑定方法。分为对象的绑定方法和类的绑定方法。

    绑定方法得特殊之处:绑定给谁,谁来调用,就自动将它本身当做第一个参数传入。

    1.1 类的绑定方法

    1、绑定到类的绑定方法

    就是用classmethod装饰器装饰的方法,为类量身定制,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当做第一个参数传入),python为我们内置了函数classmethod来把类中的函数定义成类的绑定方法

    class Person:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        
        @classmethod
        def test(cls):    # 这个方法加了classmethod装饰器就是类的绑定方法
        	print(cls)    # <class '__main__.Person'>
        	print('这是类的绑定方法')
        
        def get_obj_by_name(self,name):  # 这个就是对象的绑定方法
            pass
    p1 = Person('zyl',18)  
    p1.test()    # 对象也可以调用类的绑定方法test(),但是默认传的第一个参数还是该对象的类
    

    2、类的绑定方法用在什么地方

    当不需要通过对象,只需要通过类就能完成某些事的时候,就把该方法定义为类的绑定方法。

    1.2 对象的绑定方法

    就是类内没有被任何装饰器装饰的方法,为对象量身定制,对象调用该方法的时候,会自动将对象作为第一个参数传入。

    类也可以调用对象的绑定方法,但是这是就变成了普通的函数,有几个参数就要传几个,没有自动传值一说。具体例子上面就有,就不再写一遍了,在之前的博客中也有整理。

    二、非绑定方法(静态方法)

    2.1 什么是静态方法

    非绑定方法也称为静态方法,就是用staticmethod装饰器装饰的方法,不与类或对象绑定,但是类和对象都可以调用,但是必须按照函数的规则来,没有自动传值一说,就是一个普通工具。

    注意:与绑定到对象的方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是对象的绑定方法,不是普通函数,对象调用该方法就会自动传值,而staticmethod装饰器装饰的方法,不管谁来调用,都无法自动传值。

    class Person:
        def __init__(self,name,age):
            self.name = name
            seld.age = age
            
        @staticmethod
        def staticmethod():
            print('我是静态方法,谁都不绑定')
        
    

    2.2 作用

    • 一个方法跟类和对象都没有关系的时候,可以定义成静态方法,一般在类内部使用,但类外部也可以使用
    • 就是一个普通函数,想把它拿到类中管理,就可以定义成静态方法
  • 相关阅读:
    mmdetection安装问题(nms is not compiled with GPU support)
    【洛谷日报#75】浅谈C++指针
    NOIP专题复习3 图论-强连通分量
    NOIP专题复习2 图论-生成树
    NOIP专题复习1 图论-最短路
    题解 P1967 货车运输
    【转】linux expoll模型
    spring mvc 4.1支持protobuf converters
    ubuntu install jdk
    nosql理论基础
  • 原文地址:https://www.cnblogs.com/zhuangyl23/p/11430106.html
Copyright © 2011-2022 走看看