首页 > 其他分享 >面向对象之绑定方法和非绑定方法

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

时间:2024-01-13 23:35:00浏览次数:30  
标签:Hero show self 绑定 面向对象 print 方法

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

【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

标签:Hero,show,self,绑定,面向对象,print,方法
From: https://www.cnblogs.com/Hqqqq/p/17963203

相关文章

  • 面向对象之元类
    【一】常用的魔法方法【1】初始化对象的属性__init__【二】元类【1】什么是元类一切源于一句话:Python中一切皆对象八大基本数据类型是对象类实例化得到的对象也是对象其实类本身也是一种对象classHuman:def__init__(self,name,age):self.name=name......
  • 面向对象之封装
    【一】面向对象三大特性面向对象编程有三大特性:封装、继承、多态其中最重要的一个特性就是封装。封装指的就是把数据与功能都整合到一起【1】什么是封装就是对具体对象的一种抽象简单理解就是把不想让别人看到的对象藏起来【2】为什么要封装有些敏感数据不想......
  • 数据类型的内置方法
    【一】数据类型内置方法介绍数据类型是用来记录事物状态的,而事物的状态是不断变化的(如:一个人年龄的增长(操作int类型)单个人名的修改(操作str类型),学生列表中增加学生(操作list类型)等),这意味着我们在开发程序时需要频繁对数据进行操作为了提升我们的开发效率python针对这些常用......
  • 方法重写
    概念重写:需要有继承关系,子类重写父类的方法!方法名必须相同参数列表必须相同修饰符:范围可以扩大但不能缩小:public>Protected>Default>private抛出的异常:范围,可以被缩小,但不能扩大:ClassNotFoundException-->Exception(大)重写:子类的方法和父类必要一致:方法体不同!为......
  • 什么是面向对象
    面向过程&面向对象面向过程思想按顺序进行,线性思维步骤清晰简单,第一步做什么,第二步做什么……面对过程适合处理一些较为简单的问题面向对象思想属性加方法变成一个类物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最......
  • 回顾方法的定义
    概述方法的定义修饰符返回类型break:跳出switch,结束循环和return的区别方法名:注意规范就OK见名知意参数列表:(参数类型,参数名)...异常抛出:疑问,后面讲解代码//Java-零基础学习/src/oop/demo01/Demo01packageoop;​importjava.io.IOException;​//Demo01类......
  • 回顾方法的调用
    概述方法的调用:递归静态方法非静态方法形参和实参值传递和引用传递this关键字:疑问,后面讲解快捷键点击SplitRight 可以分成两个页面 输入new加类名,使用alt+enter 会自动补充实例化类的语句 输入非void方法名称,使用alt+enter 会自动添加变......
  • 解决 DELPHI 中执行外部命令出现屏幕一闪的问题的方法
    解决DELPHI中执行外部命令出现屏幕一闪的问题的方法有的时候我们在DELPHI中使用ShellExecuteEx(exInfo:TShellExecuteInfo)函数执行一些外部命令,但会出现,屏幕一闪的问题,解决方法如下:设置exinfo.nShow:=SW_HIDE;//隐藏命令执行的窗口,不会出现屏幕一闪的情况在exinfo......
  • js 排序方法
    数组有两个方法可以用来对元素重新排序:reverse()和sort()。顾名思义,reverse()方法就是将数组元素反向排列。比如:letvalues=[1,2,3,4,5];values.reverse();alert(values);//5,4,3,2,1这里,数组values的初始状态为[1,2,3,4,5]。通过调用reverse()反向排序,......
  • js 队列方法
    就像栈是以LIFO形式限制访问的数据结构一样,队列以先进先出(FIFO,First-In-First-Out)形式限制访问。队列在列表末尾添加数据,但从列表开头获取数据。因为有了在数据末尾添加数据的push()方法,所以要模拟队列就差一个从数组开头取得数据的方法了。这个数组方法叫shift(),它会删除......