当前位置:   article > 正文

Python 实例方法、类方法、静态方法 区别详解_简述实例方法,类方法,静态方法的区别

简述实例方法,类方法,静态方法的区别

1 概述

方法定义调用
实例方法第一个参数必须是实例对象,一般约定为 “self”,通过它来传递实例的属性和方法(也可以传递类的属性和方法)只能由实例对象调用
类方法第一个参数必须是类对象,一般约定为 “cls”,通过它来传递类的属性和方法(不能传实例的属性和方法)实例对象 和 类对象 都可以调用
静态方法参数随意,但无法传递 类和实例 的任何属性和方法实例对象 和 类对象 都可以调用

静态方法的特别说明:
1.方法体中不使用 “实例对象 和 类对象” 中的任何属性和方法
2. 静态方法主要是用来存放逻辑性代码,逻辑上属于类,但是和类本身没有关系,
    也就是说在静态方法中,不会涉及到类中的属性和方法的操作(独立的:便于使用和运维)

2 代码演示

2.1 实例方法

class Person(object):
    # 类属性
    sex = '女'

    # 构造方法:每个类都有,名称固定为 __init__,声明类时自动执行
    def __init__(self, name, age):
        self.name = name  # 实例属性
        self.age = age
        print("这是 构造方法...\n")

    # 实例方法(又称:普通方法)
    def instance_method(self):
        print("instance_method:")
        print(self.name)  # 传递 实例属性
        print(self.age)
        print(self.sex)  # 传递 类属性


if __name__ == '__main__':
    p = Person("李四", 20)

    # 实例方法的调用:只能由 实例对象 调用,不能用 类对象 调用
    p.instance_method()
    # Person.instance_method() # 报错
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

2.2 类方法

class Person(object):
    # 类属性
    sex = '女'

    # 构造方法:每个类都有,名称固定为 __init__,声明类时自动执行
    def __init__(self, name, age):
        self.name = name  # 实例属性
        self.age = age
        print("这是 构造方法...\n")

    # 类方法:可传递 类的属性和方法,但不能传递 实例的属性和方法
    @classmethod
    def class_method(cls):
        print("class_method:")
        # print(cls.name)  # 传递 实例属性 报错
        # print(cls.age)
        print(cls.sex)  # 传递 类属性


if __name__ == '__main__':
    p = Person("李四", 20)

    # 类方法的调用:实例对象 和 类对象 均可
    p.class_method()
    Person.class_method()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

输出结果:

这是 构造方法...

fun_class:
女
fun_class:
女
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.3 静态方法

import time


class Person(object):
    # 类属性
    sex = '女'

    # 构造方法:每个类都有,名称固定为 __init__,声明类时自动执行
    def __init__(self, name, age):
        self.name = name  # 实例属性
        self.age = age
        print("这是 构造方法...\n")

    # 静态方法:无法传递 类和实例 的任何属性和方法
    @staticmethod
    def static_method():
        print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
        # self.name  # 报错
        # cls.sex  # 报错


if __name__ == '__main__':
    p = Person("李四", 20)

    # 静态方法调用:实例对象 和 类对象 均可
    p.static_method()
    Person.static_method()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

执行结果:

这是 构造方法...

2023-09-28 17:45:01
2023-09-28 17:45:01
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/70347
推荐阅读
相关标签
  

闽ICP备14008679号