面向对象之绑定方法和非绑定方法

【一】绑定方法与非绑定方法介绍

【1】绑定方法#

  • 绑定给谁,谁调用就将谁作为第一个参数传入

(1)绑定到类的方法#

  • 使用classmethod装饰器来装饰
  • 将类作为第一个参数传入
  • 对象也可调用,会将实例化对象的类作为第一个参数传入

(2)绑定到对象的方法#

  • 通过 对象.方法 的方法实现,将对象作为第一个参数传入

【2】非绑定方法#

  • 使用staticmethod装饰器装饰
  • 谁都可以调用,不管是对象或类,而且没有自动传值一说
  • 可以说只是一个工具

【二】绑定方法

【1】绑定给对象的方法#

class Hero:
    name = '后羿'
    work = '射手'
    location = '王者峡谷'

    def show_info(self):
        print(f'{self.name}是一个{self.work},在{self.location}')

hero_1 = Hero()
hero_1.show_info()  # 后羿是一个射手,在王者峡谷
  • 会自动将hero_1这个对象传入到show_info第一个参数当中

【2】绑定给类的方法(classmethod)#

class Hero:
    name = '后羿'
    work = '射手'
    location = '王者峡谷'

    def show_info(self):
        print(f'{self.name}是一个{self.work},在{self.location}')

    @classmethod
    def show_game(cls):
        print(cls)
        print('我是绑定给类的方法')


Hero.show_game()
"""
后羿是一个射手,在王者峡谷
<class '__main__.Hero'>
我是绑定给类的方法
"""
  • 可以看到cls传入的就是Hero这个类

【三】非绑定方法

  • 在类内部使用staticmethod装饰器装饰方法,它就变成了非绑定方法,也就是一个普通的方法,不绑定给任何人,且没有自动传值的效果
import time


class Hero:
    name = '后羿'
    work = '射手'
    location = '王者峡谷'

    def show_info(self):
        print(f'{self.name}是一个{self.work},在{self.location}')

    @classmethod
    def show_game(cls):
        print(cls)
        print('我是绑定给类的方法')

    @staticmethod
    def show_time():
        print(time.time())


Hero.show_time()  # 1704334200.4708316
hero_1 = Hero()
hero_1.show_time()  # 1704334200.4708316

作者:Esofar

出处:https://www.cnblogs.com/Hqqqq/p/17963203

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   HuangQiaoqi  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示