Python进阶学习(3)绑定方法

文章目录

一、绑定方法

1.类方法 (绑定)

通过装饰器@classmethod 进行装饰,绑定类cls

复制代码
类方法操作一定是类属性,因为类方法无法通过self去获取对象属性
python 复制代码
class MyClass:
    class_variable = 0#对于类的全局变量

    def __init__(self, value):
        self.instance_variable = value

    @classmethod
    def class_method(cls):
        print("This is a class method")
        print(f"Class variable: {cls.class_variable}")

    def instance_method(self):
        print("This is an instance method")
        print(f"Instance variable: {self.instance_variable}")

# 调用类方法
MyClass.class_method()

# 创建实例并调用实例方法
obj = MyClass(10)
obj.instance_method()

2.主要用途包括

1.访问类变量:类方法可以访问和修改类的属性,而不需要实例化对象。这使得类方法可以用来操作类级别的数据。

2.工厂方法:类方法可以作为工厂方法,用来创建类的实例。这种方式可以提供更灵活的对象创建方式。

3.在实例化之前进行预处理:类方法可以在实例化对象之前执行一些预处理操作,例如验证参数等。

4.提高代码可读性:通过使用@classmethod装饰器,可以清晰地表明这是一个类方法,有助于代码的可读性和维护性。

3.静态方法(非绑定)

静态方法:通过装饰器@staticmethod进行装饰,为了方便代码统一管理,把类外面的某一个功能函数统一放到类里面管理,静态方法不能操作类的所有东西包括对象也是一样

单纯的一个方法:比如单纯的输出文字,单纯的计算某些数值,不改变任何属性

一句话,不需要用self,或者cls进行操作的都可以变成静态方法

python 复制代码
class MathUtils:
    @staticmethod
    def add(x, y):
        return x + y

    @staticmethod
    def multiply(x, y):
        return x * y

# 调用静态方法
sum_result = MathUtils.add(3, 5)
product_result = MathUtils.multiply(3, 5)

print("Sum:", sum_result)
print("Product:", product_result)

4.主要用途包括

1.与类的关联性较弱:静态方法与类的状态无关,不需要访问类变量或实例变量。因此,它通常用于实现与类相关但不依赖于实例状态的功能。

2.代码组织:将相关的函数放在类的命名空间下,有助于更好地组织代码。

3.提高代码可读性:通过使用@staticmethod装饰器,可以清晰地表明这是一个静态方法,有助于代码的可读性和维护性。

5.检查类型

type() # 查询单个数据类型

类如何查询类型

查询对象是否有指定的类生成 isinstance(obj/对象, cls/类)

查询是否有继承关系 issubclass(cls/子类,class_tuple/父类)

python 复制代码
import time
class Student:
    # 类属性
    number = 0

    def __init__(self, name):
        self.name = name

    def sleep(self):
        print(f"{self.name}在睡觉")


    @classmethod
    # 这个就是代表装饰类方法
    # cls 是类本身
    # 改变类属性是谁作用,类作用
    def count(cls):
        cls.number += 1
        return cls.number

    @staticmethod
    def setTime():
        print(f"{time.strftime('%Y-%m-%d')}")


student1 = Student("笑脸")
Student.count()

student2 = Student("小虎同学")
Student.count()

student3 = Student("无风柳自断")
Student.count()

student4 = Student("爱丽丝")
Student.count()

print(Student.number)

# 其中一个对象,也是和类是一样的


student5 = Student("学员1909")
student5.count()
print(Student.number)

student5.setTime()

print(isinstance(student5, Student))
print(issubclass(Student, object))
相关推荐
檀越剑指大厂3 分钟前
【Python系列】使用 memory_profiler 诊断 Flask 应用内存问题
开发语言·python·flask
笠码5 分钟前
JVM Java虚拟机
java·开发语言·jvm·垃圾回收
试着7 分钟前
零基础学习性能测试第五章:JVM性能分析与调优-垃圾回收器的分类与回收
jvm·学习·零基础·性能测试·垃圾回收器
livemetee12 分钟前
Flink2.0学习笔记:Stream API 常用转换算子
大数据·学习·flink
WXX_s15 分钟前
【OpenCV篇】OpenCV——03day.图像预处理(2)
人工智能·python·opencv·学习·计算机视觉
橙小花20 分钟前
C语言:指针、变量指针与指针变量、数组指针与指针数组
c语言·开发语言
Cyanto38 分钟前
MyBatis-Plus高效开发实战
java·开发语言·数据库
艾莉丝努力练剑1 小时前
【LeetCode&数据结构】二叉树的应用(二)——二叉树的前序遍历问题、二叉树的中序遍历问题、二叉树的后序遍历问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
花月mmc1 小时前
CanMV-K230 AI学习笔记系列
人工智能·笔记·学习
Jackilina_Stone1 小时前
【论文|复现】YOLOFuse:面向多模态目标检测的双流融合框架
人工智能·python·目标检测·计算机视觉·融合