首页 > 编程语言 >0基础学Python装饰器封装、类成员与静态方法、魔术方法

0基础学Python装饰器封装、类成员与静态方法、魔术方法

时间:2024-11-04 20:15:33浏览次数:6  
标签:__ 封装 name Python self 静态方法 方法 age def

0基础学Python装饰器封装、类成员与静态方法、魔术方法

装饰器封装

装饰器(decorators)是一种高阶函数,用于在不修改原有函数或方法定义的情况下,动态地扩展或修改函数或方法的行为。装饰器通常用于日志记录、权限检查、事务处理等横切关注点(cross-cutting concerns)。
装饰器的基本语法是使用 @ 符号来应用装饰器到一个函数或方法上。下面是一个简单的装饰器示例,以及如何封装一个更复杂的装饰器。

class Student:
    def __init__(self, name, age, sex):
        self.__name = name
        # 属性私有化
        self.__age = age
        self.__sex = sex

    @property  # get方法必须在set方法之前
    def name(self):
        return self.__name

    @name.setter
    def name(self, name):
        self.__name = name

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, age):
        if age < 0 or age > 150:
            print('age不合法,初始化为1')
            self.age = 1
        self.__age = age

    @property  # get方法必须在set方法之前
    def sex(self):
        return self.__sex

    @sex.setter
    def sex(self, sex):
        self.__sex = sex

    @sex.deleter  # 删除属性被调用
    def sex(self):
        print('=====')
        del self.__sex

    # 私有方法,仅供其他实例方法调用
    def __show(self):
        print('私有方法')

    def show2(self):
        self.__show()


if __name__ == '__main__':
    zs = Student('张三', 20, '男')
    print(zs.name) # 张三
    zs.name = '李四'
    print(zs.name) # 李四
    zs.age = 50
    print(zs.age) # 50

    del zs.sex
    # print(zs.sex)

    zs.show2()

类成员和静态方法

实例属性和方法

每一实例都有各自的一份,互不影响
实例方法第一个参数是 self,代表当前实例
实例方法可以访问类属型和类方法


类属性和类方法

属于类,只有一份
类方法第一个参数是 cls,代表当前类,没有self
类方法不能访问实例属性和方法


静态方法

属于类,只有一份
静态方法没有 cls,没有self
静态方法不能访问实例属性和方法,可以访问类属型和类方法


使用场景

静态方法使用场景: 工具方法(不需要访问类属性和类方法)
类方法使用场景: 工具方法(需要访问类属性和类方法)


代码演示:

import functools # 导入工具函数包


class Student:
    # 4.类属性
    PI = 3.14
    gradeId = 'js0003'

    # 7、魔术方法
    def __init__(self, name, no):
        self.__name = name  # 1.私有化实例属性
        self.no = no

    # 2.get方法
    @property
    def name(self):
        return self.__name
	# 2.set方法
    @name.setter
    def name(self, name):
        self.__name = name

    # 3.实例方法
    def show(self):
        print(f'{self.__name}调用了实例方法', self.PI, Student.gradeId)

    # 5.类方法
    @classmethod
    def he(cls, a, b):
        print(a + b, cls.PI)

    # 6.静态方法
    @staticmethod
    def ceng(a, b):
        print(a * b)


zs = Student('张三', 101)
ls = Student('李四', 102)

zs.no += 2
print(ls.no)  # 102
print(zs.no)  # 103
# 调用实例方法两种方式
ls.show()
Student.show(ls)

# 访问类实例: 类名.属性名
print(ls.PI)
print(Student.PI)
# 访问类方法:类名.方法名
Student.he(10, 20)  # 30

# 访问静态方法:类名.方法名
Student.ceng(10, 20)  # 200

魔术方法

定义

魔术方法(Magic Methods)是那些在对象上调用时,Python解释器会自动执行的方法。这些方法的名称前后都有双下划线(__),例如 initstradd 等。
魔术方法用于定义对象的内置行为,比如对象的初始化、比较、表示、数学运算等。通过重写这些魔术方法,你可以自定义类的行为,使其表现得像内置类型一样。


初始化与表示方法

1、__new__: 创建实例并返回,在init之前
2、__init__: 初始化实例属性,初始化新创建的对象
3、__del__: 对象不被引用,自动销毁
4、__str__: 字符串显示, 阅读,返回对象的“非正式”或可打印的字符串表示。
5、__repr__: 官方 显示,原有的样式,返回对象的“正式”字符串表示,通常用于调试。


比较运算方法

1、__lt__(self, other):定义小于行为(<)。
2、__le__(self, other):定义小于等于行为(<=)。
3、__eq__(self, other):定义等于行为(==)。
4、__ne__(self, other):定义不等于行为(!=)。
5、__gt__(self, other):定义大于行为(>)。
6、__ge__(self, other):定义大于等于行为(>=)。


算术运算方法

1、__add__(self, other):定义加法行为(+)。
2、__sub__(self, other):定义减法行为(-)。
3、__mul__(self, other):定义乘法行为(*)。
4、__truediv__(self, other):定义真除法行为(/)。
5、__floordiv__(self, other):定义地板除法行为(//)。
6、__mod__(self, other):定义取模行为(%)。
7、__pow__(self, power, modulo=None):定义幂运算行为()。**
8、__divmod__: divmod(x,y) 返回商和余数。


代码演示

class Student:
    def __new__(cls, *args, **kwargs):
        print('1.new=====')
        return super().__new__(cls)

    def __init__(self, name, age):
        print('2.init====')
        self.name = name
        self.age = age

    def __gt__(self, other):
        return self.age > other.age

    def __le__(self, other):
        return self.age <= other.age

    def __eq__(self, other):
        return self.name == other.name and self.age == other.age

    def __ne__(self, other):
        return self.name != other.name or self.age != other.age

    def __sub__(self, other):
        return self.age - other.age

    def __floordiv__(self, other):
        return self.age // other.age

    def __divmod__(self, other):
        return divmod(self.age, other.age)


zs = Student('张三', 20)
ls = Student('张三', 30)
zs2 = Student('张三', 20)
ww = Student('王五', 15)

print(zs == zs2)  # True(重写了eq)
print(zs is zs2)  # False

print(zs > ls)  # False
print(zs <= zs2)  # True
print(zs == ls)  # False

print(zs - ww)  # 5
print(zs // ww)  # 1
print(divmod(zs, ww))(1, 5)

标签:__,封装,name,Python,self,静态方法,方法,age,def
From: https://blog.csdn.net/2201_75539182/article/details/143492559

相关文章

  • opencv 图像预处理(一) python笔记
    图像预处理​在计算机视觉和图像处理领域,图像预处理是一个重要的步骤,它能够提高后续处理(如特征提取、目标检测等)的准确性和效率。OpenCV提供了许多图像预处理的函数和方法,以下是一些常见的图像预处理操作:图像空间转换图像大小调整图像仿射变换图像翻转图像裁剪图像二值......
  • python+flask框架的智慧停车平台 小程序28(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着城市化进程的加速,车辆数量急剧增加,停车难问题已成为各大城市面临的普遍难题。智慧停车平台作为解决停车难问题的有效手段,近年来在国内......
  • python+flask框架的智慧停车平台 小程序18(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着城市化进程的加速,车辆数量急剧增加,停车难问题已成为各大城市面临的普遍难题。智慧停车平台作为解决停车难问题的有效手段,近年来在国内......
  • python+flask框架的智慧工会微信小程序 小程序端28(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展和移动互联网的普及,微信小程序作为一种轻量级的应用形态,已成为各类服务接入互联网的重要平台。智慧工会作为新时代......
  • Python数据分析NumPy和pandas(二十、数据清洗和预处理之二:数据转换)
    在数据分析和建模过程中,处理缺失数据很重要,另外对于数据的筛选、清理和转换同样很重要。一、删除重复数据删除重复的行。DataFrame的方法duplicated()返回一个布尔序列,判断每一行是否重复(其列值与前一行中的列值完全相等则为重复)。另一个方法drop_duplicates()返回一个去......
  • 【Python期末/课程设计】高校成绩管理系统(PyCharm项目/flask框架/MySQL数据库)
    代写C语言、C++、Java、Python、HTML、JavaScript、vue、MySQL相关编程作业,长期接单,信誉有保证,如有需要请加推广QQ。本文资源:【Python期末/课程设计】高校成绩管理系统(PyCharm项目/flask框架/MySQL数据库)1.题目要求题目描述:无编程软件:2.视频演示【Python期......
  • 基于Python星载气溶胶数据处理与反演分析技术
    Python作为一种强大且易于学习的编程语言,已广泛应用于数据科学和大气科学领域,Python凭借其强大的数据处理能力,可以高效处理海量的气溶胶数据。例如,通过Pandas库,研究人员可以进行高效的数据清洗、整理和分析;NumPy库则提供了强大的数值计算功能,能够快速进行各种数学和统计运算;Ca......
  • python+flask计算机毕业设计个性化推荐图书借阅系统开发(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于图书借阅系统的研究,现有研究主要以传统借阅管理为主,如[1]中的图书借阅管理系统侧重于管理员操作和基本借阅功能的实现。专门针对......