zoukankan      html  css  js  c++  java
  • 类和对象的绑定方法和非绑定方法

    类中定义的方法大致可以分为两类:绑定方法和非绑定方法。其中绑定方法又可以分为绑定到对象的方法和绑定到类的方法。

    一、绑定方法

    对象的绑定方法/类的绑定方法

    1.1 对象的绑定方法

    在类中没有被任何装饰器修饰的方法就是 绑定到对象的方法,这类方法专门为对象定制。

    通常说的绑定方法都是对象的绑定方法,因为类创建时默认就是对象的绑定方法。

    当对象调用时,不需要传递第一个参数。

    1.2 类的绑定方法

    类中使用 @classmethod 修饰的方法就是绑定到类的方法。这类方法专门为类定制。通过类名调用绑定到类的方法时,会将类本身当做参数传给类方法的第一个参数

    类的绑定方法,也可以由对象来调

    class Person:
        def __init__(self,name,age):
            print(self)
            self.name=name
            self.age=age
        @classmethod	# 使用 @classmethod 装饰器,变为类的绑定方法
        def test(cls):
            print(cls)
            print('类的绑定方法')
            #类实例化产生对象,返回
            return cls('lqz',19)
    
    # 使用类绑定方法
    per1=Person.test()
    
    # 通过对象调用类绑定方法
    per2=Person('xc',18)
    per2.test()
    

    1.3 类的绑定方法用在什么地方?

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

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

    在类内部使用 @staticmethod 修饰的方法即为非绑定方法,这类方法和普通定义的函数没有区别,不与类或对象绑定,谁都可以调用,且没有自动传值的效果

    静态方法不属于任何人的绑定方法,就是个普通函数。但是别人一样可以使用

    class Person:
        def __init__(self,name, age):
            self.id=self.get_uuid()
            self.name = name
            self.age = age
    
        #当成一个普通函数,只不过是写在类内部的
        @staticmethod
        def static_method():
            print('我是静态方法,谁都不绑定')
            
        @staticmethod
        # 生成一个唯一的id号
        def get_uuid():
            import uuid
            return uuid.uuid4()
        
    # 类来调用静态方法
    Person.static_method()
    
    # 对象来调用静态方法
    p=Person('xc',19)
    p.static_method()
    

    2.1 非绑定方法用在什么地方?

    当这个方法,跟类和对象都没有关系的时候,可以定义成静态方法,一般在类内部使用,类外部也可以使用

    就是一个普通函数,想把它拿到类中管理,就可以定义成静态方法

  • 相关阅读:
    JVM学习-垃圾回收算法
    JVM学习-jvm判断对象已死的方法
    JVM学习-jvm内存区域
    python 多线程
    Python+unittest+requests+excel实现接口自动化测试框架
    linux 运行tensorflow文件缺少_bz2问题及解决
    获取url地址
    微信小程序的小问题(2)
    微信小程序的小问题(1)
    前端知识
  • 原文地址:https://www.cnblogs.com/XuChengNotes/p/11429730.html
Copyright © 2011-2022 走看看