python面向对象-学习笔记(三、类方法、实例方法、静态方法)

发布时间 2023-10-29 15:33:45作者: 阿慢2010

方法相关

方法的概念

描述一个目标的行为动作
和函数相似

  • 封装了一系列行为动作。比如一个人怎么吃,怎么喝,怎么玩...
  • 都可以被调用
  • 最主要区别:调用方式

方法的划分

  • 实例方法:默认第一个参数是一个实例
  • 类方法:默认第一个参数是类
  • 静态方法:没有默认参数
  • 注意
    1. 划分的依据:方法的第一个参数必须要接收的数据类型
    2. 不管哪一种类型的方法,都存储在类中;没有在实例当中的
    3. 不同类型方法的调用方式不同
实例方法、类方法及静态方法的调用
class Person:
    def eat2(self):
        print("这是一个实例方法", self)

    @classmethod
    def leifangfa(cls):
        print("这是一个类方法", cls)

    @staticmethod
    def jingtaifangfa():
        print("这是一个静态方法")


p = Person()
p.eat2()
# p.leifangfa() # 实例可以调用
# p.jingtaifangfa() # 实例可以调用

Person.leifangfa()
Person.jingtaifangfa()

image

实例方法

类中实例方法的调用方式
class Person:
    def eat(self, food):
        print("在吃饭.", self, food)


# 标准调用实例方法
p = Person()
print(p)
p.eat("粥")

# 第二种调用实例方法(使用类调用)
Person.eat(123, 456)

# 第三种方法(间接调用)
func = Person.eat
func("实例", 999)

image

类方法

类方法的调用方式
class Person:
    @classmethod
    def leifangfa(cls, a):
        print("这是一个类方法", cls, a)


# 第一种
Person.leifangfa("100")

# 第二种
p = Person()
p.leifangfa("200")

# 第三种
func = Person.leifangfa
func("300")


# 装饰器的作用:在保证原有函数功能的情况下,给函数增加新的功能

class A(Person):
    pass


A.leifangfa("A")

image

静态方法

静态方法的调用方式
class Person:
    @staticmethod
    def jingtai():
        print("这是一个静态方法")


# 第一种调用方式(类调用)
Person.jingtai()
# 第二种调用方式(实例调用)
p = Person()
p.jingtai()
# 第三种调用方式
Func = Person.jingtai
Func()
# 第四种调用方式
Func2 = p.jingtai
Func2()

image

不同类型的方法访问不同类型的属性规律
class Person:
    age = 0

    def shilifangfa(self):
        print(self)
        print(self.age)
        print(self.num)

    @classmethod
    def leifangfa(cls):
        print(cls)
        print(cls.age)
        # print(cls.num) # 类方法无法访问实例属性

    @staticmethod
    def jintaifangfa():
        print(Person.age)


p = Person()
p.num = 10

# 类属性
print(Person.age)
print(p.age)

# 实例属性
print(p.num)

p.shilifangfa()
p.leifangfa()
p.jintaifangfa()

# Person.leifangfa()
# Person.jintaifangfa()

image


学习链接: 【Python】零基础入门 面向对象编程(强烈推荐)