Python基础语法速记-2

news/2024/10/30 9:24:41/

面向对象编程,不按照步骤来实现业务,而是把一个系统拆解出若干事务,每个事务就是一个对象。区别于面向对象编程,自顶向下,逐步细化,把一个系统拆解为若干步骤,每一个步骤就是一个函数

1. 类与对象

获得具体对象,首先先要有类

"""
object为一切类的父类(此处为 继承特性的语法书写格式)
object类似Java中的java.lang.Object
"""class ClassTest(object):# 占位符pass

对象具有成员(对象)属性 和 成员(对象)方法,成员属性 和 成员方法既可以在类内部定义,也可以在类外部定义

对象的成员属性外部定义

class ClassTest(object):# 占位符pass# 对象的成员属性外部定义
classTest = ClassTest()
classTest.memPro1 = 10
classTest.memPro2 = '这是一个测试类'
classTest.memFun = lambda a, b: a + bprint(classTest.memPro1)
print(classTest.memPro2)
print(classTest.memFun(3, 4))

在类的内部,为所有对象添加成员属性,需要借助于魔术方法
类似于__int__(),__str__(),__del__()这样,用__开头,
以__结尾的方法称为魔术方法,同样,以__开头,以__结尾的属性称为魔术属性(魔术变量) if __name__ == '__main__':

class ClassTest(object):"""self关键字指向实例化对象本身,类似于Java中的this关键字当类被具体实例化时,__init__()自动触发,用于对象的初始化操作"""def __init__(self, memPro1, memPro2):self.memPro1 = memPro1self.memPro2 = memPro2def memFun(self, a, b):return a + b# 该方法不被重写时,默认返回实例化对象的内存地址# 该方法类似于Java中的toString()def __str__(self):return f'实例化了一个对象,成员属性为{self.memPro1}{self.memPro2}'# 用于对象资源的释放,类似于C语言中的析构函数def __del__(self):pass

2. 面向对象三大特性之封装

Java语言中,可以使用private关键字实现成员属性和成员方法的封装,但Python中没有private关键字,属性和方法的封装通过__实现,以此达到保护对象内数据的目的

class ClassTest(object):def __init__(self, memPro1, memPro2):self.memPro1 = memPro1self.memPro2 = memPro2# 私有成员属性self.__memPro3 = self.memPro1 + self.memPro2# 公共方法def redirectURL(self, url):if self.__getMemPro3() == url:print(f'跳转到{url}')else:print('用户非法访问')# 私有成员方法def __getMemPro3(self):return self.__memPro3def superMethod(self):print('subClass may used or override')
# 对象实例化
classTest = ClassTest(10, '这是一个测试类')
classTest.redirectURL('https://www.csdn.net/')

3. 面向对象三大特性之继承

继承就是一个类直接使用另一个类定义的成员属性和成员方法(包括构造方法),本类不再重复定义。区别于Java中的extends关键字,Python中的继承语法如下:

from object.ClassTest import ClassTest# 类SubClassTest继承父类ClassTest
class SubClassTest(ClassTest):def __init__(self, mempro1, mempro2):self.mempro1 = mempro1self.mempro2 = mempro2def __init__(self):passsubClassTest = SubClassTest()
# 子类直接使用父类中的superMethod()
subClassTest.superMethod()

区别于Java中的继承,Python中一个子类可以同时继承多个父类

class C(object):pass
class B(object):passclass A(B, C):pass

如果多个父类具有相同的属性和方法,则子类中位于左边父类的属性和方法具有较高优先级

可以通过子类的方法moto() 或 魔术变量 __moto__ 查看子类的继承关系

print(HybridCar.mro())
print(HybridCar.__mro__)

子类可以重写父类中的方法,只需要方法签名和父类保持一致,在子类的重写方法中,也可以调用 super()方法,访问父类的成员属性和成员方法

4.面向对象三大特性之多态

多态可以理解为同一个事物的的多种形态,Python语言中体现为:同一个方法,随着传入参数的不同,返回不同的执行结果

多态依赖继承,需要重写父类中的公共方法

class Fruit(object):def makejuice(self):print('i can makejuice')class Apple(Fruit):def makejuice(self):print('i can make apple juice')class Banana(Fruit):def makejuice(self):print('i can make banana juice')class Orange(Fruit):def makejuice(self):print('i can make orange juice')# 定义一个公共接口
def service(obj):obj.makejuice()# 统一方法,随着传入对象的不同,可以返回不同的执行结果
service(Apple())
service(Banana())
service(Orange())

5. 静态方法

类中的静态方法,需要在方法前添加装饰器 @staticmethod ,装饰器主要用于修饰方法,在不修改源代码的基础上,为其增加额外功能。
调用方式:类名.静态方法,对象实例.静态方法

class StudentManager(object):def __init__(self):self.students = []@staticmethoddef menu():print('-' * 50)print('欢迎使用学生管理系统V1.0')print('-' * 50)StudentManager.menu()
StudentManager().menu()

http://www.ppmy.cn/news/61437.html

相关文章

AcWing——方格迷宫(有点不一样的迷宫问题)

4943. 方格迷宫 - AcWing题库 1、题目 给定一个 n 行 m 列的方格矩阵。 行从上到下依次编号为 1∼n,列从左到右依次编号为 1∼m。 第 i 行第 j 列的方格表示为 (i,j)。 矩阵中的方格要么是空地(用 . 表示),要么是陷阱&#xf…

UE5实现物体高亮描边效果(含UE相关源码浅析)

文章目录 1.实现目标2.实现过程2.1 UE Editor中相关源码2.2 深度值描边2.3 半透明材质处理2.4 遮挡处理2.5 视口边缘处理3.参考资料1.实现目标 在UE5中实现物体边缘高亮效果,且在被遮挡时在边缘显示不同的颜色,当到达视口边缘时,也会将该物体与视口边缘相交的部分高亮。 2.…

api接口对接实例

目录 JD平台API接口 api接口对接 json模块 md5加密: 双重加密: 加盐: 测试实列: JD平台API接口 京东API(Application Programming Interface)是京东提供的一组符合RESTful规范的接口,可以用来获…

自学软件测试简历没项目写怎么办?

目录 一、引言 二、测试任务 三、测试进度 四、测试资源 五、测试策略 六、测试完成标准 七、风险和约束 八、问题严重程度描述和响应时间规范 九、测试的主要角色和职责 软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程,其目的在于检验…

Python之模块和包(九)

1、模块 1、模块概述 模块是一个包含了定义的函数和变量等的文件。模块可以被程序引入,以使用该模块中的函数等功能。通俗讲:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块。 2、import 在P…

vueRoute的路由正则表达式

Vue Router中的路由正则表达式与JavaScript的正则表达式语法相同,可以使用常见的正则表达式语法,例如字符类、重复和分组等。 以下是一些常见的正则表达式示例: 匹配数字: path: /user/:id(\\d)这可以匹配一个或多个数字。 匹配…

【IDEA】简单入门:请求数据库表数据

目录 修改编辑与控制台字体大小 二、sprintboot项目入门 【1】直接开始配置Controller 【2】直接请求数据库中的数据,返回json格式 (0)整合PostgreSQL框架 (2)实体entity类 (3)控制类Mai…

剪纸中秋海报

打开【Ps】,新建【A4画布】,双击背景图层【解锁】,再添加【图案叠加】图层样式,选择最后一个图案,增加【缩放】。 【椭圆选框工具】按住【Shift】键画一个正圆,填充颜色#0e8993,添加【渐变叠加】…