【笔记3】面向对象在Python中的实践_方法相关

方法相关

方法的概念

描述一个目标的行为动作:比如描述一个人怎样吃,怎样喝,怎样玩…

和函数非常类似

  • 都封装了一系列行为动作
  • 都可以被调用的之后,执行一系列行为动作
  • 最主要的区别就是:调用方式
方法的划分
  1. 实例方法(实例也就是对象,因为对象是类的实例化,当我们探索底层时,称“类对象”与“一般对象”,再接下来我们统称一般对象为“实例”,则对应属性即为类属性与实例属性)

    默认第一个参数需要接收到一个实例

  2. 类方法

    默认第一个参数需要接收到一个类

  3. 静态方法

    第一个参数啥也不默认接收

注意:

  • 划分的依据是:方法的第一个参数必须要接收的数据类型
  • 不管是哪一种类型的方法,都是存储在当中;没有在实例当中的;
  • 不同类型方法的调用方式不同,但,不管怎么调,把握一个原则
    • 不管是自己传递,还是解释器帮我们处理;最终要保证不同类型的方法第一个参数接收到的数据,是他们想要的类型
实例方法+类方法+静态方法

实例方法与类方法不是存储层面的,而是方法的第一个参数必须要接收的数据类型而已。三种方法都是存储到类的dict中的。

实例方法

class Person:
    # 实例方法
    def eat2(self):
        print(1)
        print(2)
        print(3)
    def run(self,food):
        print("在吃饭",food)
    # self是形参,在调用中可被实参代替。
    # 也可以加其他名字,不在乎形参名称,都会把实例对象本身传递给实例方法的第一个参数,self是规范写法。
p = Person()
p.run("土豆")   # 第一个参数不用传递
# 在吃饭土豆  

标准调用:使用实例调用实例方法;不用手动传,解释器会默认把调用对象本身传递过去。

注意:如果实例方法没有接受任何参数则会报错。def run(): # 无参数,调用会报错

其他调用:使用类调用;间接调用;本质就是直接找到函数本身来调用。

类方法

class Person:
    # 类方法
    @classmethod
    def leifangfa(cls):
        print("这是一个类方法",cls)
    def leifangfa1(cls,a):
        print("这是一个类方法",cls,a)
# 装饰器的作用:在保证原本函数不改变的前提下,直接给这个函数增加一些功能。
Person.leifangfa1(123)

p = Person()
p.leifangfa1(555)

func = Person.leifangfa1
func(111)

类调用:不用手动传递第一个参数,会自动的把调用的类本身给传递过去(直接写第二个参数即可)。

对象调用:不用手动传递第一个参数,会自动的把调用的对象对应的类给传递过去。

注意:一般使用类来调用。

关于@classmethod
关于@classmethod

静态方法

class Person:
    # 静态方法
    @staticmethod
    def jingtaifangfa():
        print("这是一个静态方法")
        
Person.jingtaifangfa()
p = Person()
p.jingtaifangfa

func = Person.jingtaifangfa
func()

类调用:直接调用就可以, 不需要考虑第一个参数。

对象调用:直接调用就可以。

注意:具体使用谁来调用,根据场景,哪个比较适合方便就使用哪个。

补充

要注意不同类型的方法访问不同类型的属性规律。

函数和方法的区别?

  • 是否有宿主
  • 函数都是独立的个体,函数之间几乎没有共享的数据
  • 方法有宿主
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值