首页 > 其他分享 >绑定方法与非绑定方法md

绑定方法与非绑定方法md

时间:2024-01-12 21:33:41浏览次数:28  
标签:md 调用 对象 绑定 qc Student 方法

绑定方法

绑定方法:绑定给某个目标(类或对象)的方法 --- 动态方法

绑定给对象的方法

类的属性有两种:一种是数据属性 一种是函数属性

class Student:
    # 【1】数据属性
    address = '上海'

    # 【2】函数属性
    def run(self, name):
        print(f' {name} 正在跑步')

实例化得到对象,对象调用对象的绑定方法

stu = Student()
stu.run('qc')  # qc 正在跑步
print(stu.address)  # 上海

如果是类调用对象的绑定方法,那么就需要将对象作为参数传进去

stu = Student()
Student.run(stu, name='qc')  # qc 正在跑步

在Python里面一切皆对象,八大基本数据类型全是对象,包括 None

Student.run('aaa', 'qc')  # qc 正在跑步
Student.run(None, 'qc')  # qc 正在跑步

总结:

  • 对象调用绑定给对象的方法,不需要传额外的参数,直接能调用执行
  • 类调用绑定给对象的方法,第一个位置参数必须是实例化得到的对象,加其他可能传入的额外的参数

绑定给类的方法

  • classmehtod是给类用的,即绑定到类
class Student:

    address = '上海'

    @classmethod  # 装饰器的语法糖
    def read(cls,name):
        print(f' {name} 正在读书')

对象调用绑定给类的方法,这里会自动检索到当前实例化得到当前对象的类,然后将类作为cls的参数传入

stu = Student()
stu.read(name='qc')  # qc 正在读书

类调用绑定给类的方法,将调用此方法的类,作为cls的参数自动传入

Student.read(name='qc')  # qc 正在读书

总结

  • 对象调用绑定给类的方法,不需要传入额外的参数,会自动将当前实例化此对象的类作为参数传入
  • 类调用绑定给类的方法,不需要额外的传入参数,会自动将调用次方法的类作为参数传进去

非绑定方法

  • 在类内部用staticmethod装饰的函数即非绑定方法,就是普通函数
  • statimethod不与类或对象绑定,谁都可以调用,没有自动传值效果
class Student:
    address = '上海'

    @staticmethod
    def run(name):
        print(f' {name} 正在跑步')

对象调用非绑定方法.不需要传额外的参数

stu = Student()
stu.run(name='qc')  # qc 正在跑步

类调用绑定方法.不需要传额外的参数

Student.run(name='qc')  # qc 正在跑步

总结:

  • 对象调用非绑定方法,不需要传额外的参数

  • 类调用非绑定方法,不需要传额外的参数

绑定方法与非绑定方法总结

概念上来说

绑定方法 : 就是绑定给某个目标(类或对象)的方法才叫绑定方法

非绑定方法:不绑定给某个目标(类或对象)的方法叫非绑定方法

调用方式上来看

绑定给对象的方法:对象可以任意调用,类可能会受到某些限制

绑定给类的方法:类可以任意调用,对象可能会受到某些影响

非绑定方法:不受类和对象的限制,可以任意调用

定义方式上来看

绑定给对象的方法:正常我们定义的所有方法都是绑定给对象的方法,在定义方法的时候,会自动补全 self

绑定给类的方法:用装饰器装饰我们想要绑定给类的方法,在定义方法的时候,会自动补全 cls

非绑定方法:既不绑定给对象也不绑定给类,在定义方法的时候,不会自动补全参数

标签:md,调用,对象,绑定,qc,Student,方法
From: https://www.cnblogs.com/unrealqcc/p/17961642

相关文章

  • Microsoft 365 新功能速递:为Microsoft Entra ID中的设备绑定密钥(更改为FIDO2和Windows
    51CTO博客链接:https://blog.51cto.com/u_13637423从2024年2月中旬开始,除了现有的FIDO2安全密钥支持外,MicrosoftEntraID还将支持存储在计算机和移动设备上的设备绑定密钥,作为预览中的身份验证方法。这使您的用户能够使用现有设备执行防钓鱼身份验证。我们将扩展现有的FIDO2身份验......
  • 防火墙添加允许服务器IP和端口方法
    一、检测防火墙命令systemctlstatusfirewalld如果显示如下active表示防火墙开启●firewalld.service-firewalld-dynamicfirewalldaemonLoaded:loaded(/usr/lib/systemd/system/firewalld.service;enabled;vendorpreset:enabled)Active:active(ru......
  • 优化 Odoo 性能:方法级别缓存的魔力
    浅谈Odoo的 @ormcache 装饰器。1.缓存的背景在实际开发中,某些计算可能会消耗大量时间和资源。例如,在计算字段的值时,可能需要执行复杂的逻辑或查询大量数据。为了避免在相同参数下重复执行这些耗时的计算,我们可以使用缓存机制。2.使用@ormcache装饰器在Odoo中,@ormcache ......
  • 几种数据库忘记密码的处理方法
    MySQL8.0分为rpm方式和tar.gz安装方式不同而不同需要修改/etc/my.conf配置文件.注意如果是rpm包的话就在这个路径下面修改增加内容skip-grant-tables注意修改完需要重启数据库rpm包安装的方式重启方法为:systemctlrestartmysqld然后可以无密码登录数据mysql-uro......
  • Outlook邮箱注册方法
    在当今数字化的时代,电子邮件已经成为人们日常生活和工作中不可或缺的一部分。而Outlook作为Microsoft旗下的一款强大的电子邮件服务,被广泛应用于全球范围内。为了享受Outlook提供的便捷服务,注册一个Outlook邮箱是第一步。接下来,我们将详细介绍Outlook邮箱注册的方法,让您轻松拥有一......
  • Outlook邮箱注册方法
    在当今数字化的时代,电子邮件已经成为人们日常生活和工作中不可或缺的一部分。而Outlook作为Microsoft旗下的一款强大的电子邮件服务,被广泛应用于全球范围内。为了享受Outlook提供的便捷服务,注册一个Outlook邮箱是第一步。接下来,我们将详细介绍Outlook邮箱注册的方法,让您轻松拥有一......
  • js localeCompare()方法
    最后一个与模式匹配相关的字符串方法是split()。这个方法会根据传入的分隔符将字符串拆分成数组。作为分隔符的参数可以是字符串,也可以是RegExp对象。(字符串分隔符不会被这个方法当成正则表达式。)还可以传入第二个参数,即数组大小,确保返回的数组不会超过指定大小。来看下面的......
  • js eval()方法
    与encodeURI()和encodeURIComponent()相对的是decodeURI()和decodeURIComponent()。decodeURI()只对使用encodeURI()编码过的字符解码。例如,%20会被替换为空格,但%23不会被替换为井号(#),因为井号不是由encodeURI()替换的。类似地,decodeURIComponent()解码所有被encodeUR......
  • js Math方法
    ECMAScript提供了Math对象作为保存数学公式、信息和计算的地方。Math对象提供了一些辅助计算的属性和方法。1.Math对象属性:Math对象有一些属性,主要用于保存数学中的一些特殊值。下表列出了这些属性。Math.EMath.LN10Math.LN2Math.LOG2EMath.LOG10EMath.PIMath.SQRT1_......
  • 程序员必知!模板方法模式的实战应用与案例分析
    模板方法模式让子类在不改变算法整体结构的前提下定制特定步骤,例如咖啡制作,不同咖啡遵循相同流程但有独特定制,如拿铁加牛奶,美式不加,这确保了制作流程的一致性,同时满足了不同咖啡的个性化需求,体现了模板方法模式的核心思想。定义模板方法模式是一种行为设计模式,它在一个方法中......