Loading

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

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

【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
posted @ 2024-01-13 23:21  HuangQiaoqi  阅读(6)  评论(0编辑  收藏  举报