第五节 python面向对象

高级编程 第五节:Python面向对象进阶 本文探讨了Python中"一切皆对象"的概念和元类的原理。首先指出在Python中,类本身也是对象,是由type类创建的实例。文章详细分析了两种对象关系:父子继承关系和类型实例关系,并介绍了__class__和__bases__两个重要属性。然后深入讲解了元类(metaclass)的概念,说明type是所有类的元类,负责创建类对象。通过代码示例展示了如何使用type动态创建类,以及如何自定义元类来修改类的属性。最后给出了一个实用示例,演示如何通过函数式元类将类属性名改为大写(私有属性除外 阅读详情

类与对象

实例变量与类变量

实例方法与类方法

#类的定义
class person(object):


    # 构造方法
    def __init__(self,name,age,addr,gender):
        self.name = name
        self.age = age
        self.__addr = addr
        self.gender = gender


    #类属性
    name="mike"
    __addr="山东"  #私有类属性
    #实例属性是不需要定义在类里面的

    #类方法,可以通过类名和实例对象名访问
    @classmethod
    def setAddr(cls,addr):
        cls.__addr = addr
    #实例方法,只能被实例对象访问
    def getName(self):
        return self.name
    @staticmethod
    def pringLog():
        print(person.name,person.__addr)

def main():
    '''
    1. python不支持函数重载,因此构造函数无法重载
    2. 如果类内由实例变量的引用,那么实例变量必需在构造函数内部声明并赋值
    3. 静态方法要访问类中变量,用类名访问
    '''
    p1 = person("jhon",23,"广东","男")
    print(p1.name,p1.age,p1.gender)
    p1.pringLog() #实例对象访问静态方法
    person.pringLog()  #类名访问静态方法

if __name__ == '__main__':
    main()

封装


class employee(object):
    def __init__(self,name,age):
        self.__name=name
        self.__age=age
    #实现__name和__age的setter和getter方法
    def set_name(self,name):
        self.__name=name
    def get_name(self):
        return self.__name
    def set_age(self,age):
        self.__age=age
    def get_age(self):
        return self.__age

    #要想使用上述方法 需要:em.set_name("mike")

    #如果想要和使用变量一样使用  em.name="mike"

    #getter
    @property
    def name(self):
        return self.__name
    @property
    def age(self):
        return self.__age
    #setter方法
    @name.setter  #这里的name必需是被property装饰的方法名
    def name(self,name):
        self.__name=name
    @age.setter #这里的age必需是被property装饰的方法名
    #否则的话,会出现TypeError: descriptor 'setter' requires a 'property' object but received a 'function'错误
    def age(self,age):
        self.__age=age


if __name__ == '__main__':
    em = employee("mike",34)
    print(em.name,em.age)
    em.name="adasdf"
    em.age=45
    print(em.name,em.age)

继承

继承一个类

class person(object):
    def __init__(self,name,age):
        self.__name=name
        self.__age=age

    #获取类的信息
    def getInfo(self):
        print(self.__name,self.__age)

    #getter方法
    @property
    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):
        self.__age=age

#继承
class student(person):
    def __init__(self,name,age,score):
        #要调用父类的构造器,否则将没有name和age属性
        super(student,self).__init__(name,age)
        self.__score = score

    def getInfo(self):
        print(self.name,self.age,self.__score)

    @property
    def score(self):
        return self.__score
    @score.setter
    def score(self,score):
        self.__score = score

def main():
    stu = student("mike",23,78)
    stu.getInfo()
    stu.name="jhon"
    stu.getInfo()

if __name__ == '__main__':
    main()

多继承

class father(object):
    def __init__(self,firstName,secondName):
        self.__firstName=firstName
        self.__secondName=secondName



class mother(object):
    def __init__(self,firstName,seconName,gender):
        self.__firstName=firstName
        self.__secondName=seconName
        self.__gender=gender
    @property
    def firstName(self):
        return self.__firstName
    @firstName.setter
    def firstName(self,firstName):
        self.__firstName=firstName

    @property
    def secondName(self):
        return self.__secondName

    @secondName.setter
    def secondName(self,secondName):
        self.__secondName = secondName
    @property
    def gender(self):
        return self.__gender
    @gender.setter
    def gender(self,gender):
        self.__gender = gender

class son(father,mother):
    def __init__(self,firstName,secondName,gender,age):
        mother.__init__(self,firstName,secondName,gender)
        self.__age=age
    def getInfo(self):
        print(self.firstName,self.secondName,self.gender,self.__age)
'''
    在单继承中:如果子类没有__init__函数,那么会自动调用父类的__init__函数
    在单继承中,如果子类有__init__函数,那么需要显式的调用父类的__init__函数

    在多继承中,如果子类没有__init__函数,那么会自动调用第一个父类的__init__函数
        如果第一个父类中没有__init__函数,那么会依次调用第二个,第三个父类,一直到找到__init__函数
    在多继承中,如果子类有__init__函数,那么需要显式指出调用哪个父类的__init__函数
'''



def main():
    s = son("王","li","男",34)
    s.getInfo()

if __name__ == '__main__':
    main()

多态

多态的定义
- python有序列类型,但是序列类型有很多,列表,元组,字典等
- 文件有很多,但是类型有文本,可执行文件等
- 在我们打开文件的时候,根据类型,选择不同的打开方式

python中的多态也是这个原理。

class cat(object):
    def log(self):
        print("cat")

class dog(object):
    def log(self):
        print("dog")

class computer(object):
    def log(self):
        print("computer")

#下面实现一个函数,调用log方法
def printLog(x):
    x.log()
#在上面的函数中,传入什么类型,就会打印哪个类型的log
#这就是多态

def main():
   c = cat()
   d = dog()
   com = computer()

   printLog(c)
   printLog(com)
   printLog(d)



if __name__ == '__main__':
    main()

鸭子类型(接口)

    python是一种动态类型语言,因此,python有一种鸭子类型。

    即,在python中只要包含某个方法,就认为这就是哪个东西。

    比如猫,狗,和电脑,很明显不是一类。但是都包含log()方法

    那么,python就认为cat,dog,computer 都是x类型。
GD32F303调试小记(一)之USART(接收中断、接收空闲中断+DMA、发送DMA) 前言 之前写了GD32F103调试小记(二)之USART(接收中断、接收空闲中断+DMA、发送DMA)一文。这次我们来看看GD32F303的USART是如何配置的,结合这两篇文章,相信大家GD32的USART配置流程会十分熟悉。 DMA 能大大减轻CPU负荷的东西,建议场景合适的情况下,都去用DMA功能。 USART 一种串行通信协议, ... 阅读详情

相关推荐

Android dex, odex, oat, vdex, art文件介绍

下图可以简化将Java源转换为OAT的过程: .dex Dalvik虚拟机字节码文件 .vdex 其中包含APK的未压缩DEX代码,以及一些旨在加快验证速度的元数据 .odex .oat // JIT,Just-in-time,即时编译,边运行边编译; // AOT,Ahead Of Time,提前编译,指运行前编译。 其中包含APK中已经过AOT编译的方法代码。 原始DEX文件(例如classes.dex)被转换为另一个包含本机代码的文件。这个新文件通常具有.odex。.oat扩展名,并由ELF格式

he980725866的博客 3620

解决报错:在Python中使用property装饰器时,出现错误:TypeError: descriptor ‘setter‘ requires a ‘property‘ object but

解决报错错误信息问题分析问题代码解决报错参考文档 错误信息        •我们在使用property装饰器时,可能因为装饰器名称书写错误导致下述错误: TypeError: descriptor 'setter' requires a 'property' object but received a 'function' 问题分析        •出现此错误的原因

但行好事,莫问前程 2531

TIA博途V15.1实战:用PLCSIM Advanced V2.0模拟Modbus TCP/IP通信(附完整DB块配置)

本文详细介绍了如何在TIA博途V15.1环境中,利用PLCSIM Advanced V2.0软件仿真S7-1500 PLC的Modbus TCP/IP通信功能。通过实战步骤,重点解析了MB_SERVER指令调用、连接参数(CONNECT)配置以及核心数据块(DB)的映射方法,并附上了完整的DB块配置示例,帮助工程师在无物理硬件条件下高效完成通信逻辑的验证与调试。

m2n3o4p5的博客 408

TypeError: descriptor '__init__' requires a 'super' object but received a 'str'

在写继承案例的时候报错,TypeError: descriptor '__init__' requires a 'super' object but received a 'str',代码如下 class A(): def __init__(self,name): self.name=name print(self.name) class B(A): ...

cuicui_ruirui的博客 2513

鸿蒙设备部署轻量级Web服务器NexServer实践

Web服务器作为互联网基础设施的核心组件,其轻量化部署在移动终端领域具有重要实践价值。本文以鸿蒙操作系统为技术载体,深入解析微内核架构如何通过资源隔离和分布式软总线实现服务高可用。重点探讨NexServer这一专为嵌入式场景设计的轻量级服务器,其ARM原生支持特性与15MB级内存占用,在HTTP/2协议处理与WebSocket通信中展现出独特优势。在智能家居控制面板、边缘计算节点等物联网典型场景中,鸿蒙设备结合NexServer的方案相比传统Nginx部署可降低60%资源消耗。通过实测数据对比,该组合在50

weixin_30411239的博客 481

GD32F303实战:用定时器4触发ADC2+DMA,实现10ms精准采样1024点的完整流程

本文详细介绍了在GD32F303微控制器上使用Timer4触发ADC2配合DMA传输,实现10ms精准采样1024点的完整方案。从硬件架构设计、时钟树配置到定时器参数计算,提供了完整的工程实现流程和常见问题排查方法,适用于工业传感器监测等高实时性场景。

weixin_29194693的博客 433

descriptor ‘__init__‘ requires a ‘super‘ object but received a ‘str‘出错

descriptor '__init__' requires a 'super' object but received a 'str'报错

m0_62517923的博客 1239

UFS电源管理深度解析:从电气特性到功耗模式优化

本文深度解析UFS电源管理,从VCC、VCCQ、VCCQ2三路供电体系切入,详细阐述了UIC链路休眠(HIBERN8)机制与设备七种功耗模式(Active、Idle、Sleep、Power Down)的切换逻辑。文章重点探讨了如何通过主动功耗管理策略与动态调整激活模式电流等级(bActiveICCLevel),在嵌入式与移动设备中实现性能与功耗的精细平衡与优化。

weixin_29243279的博客 489

Python TypeError: descriptor '__init__' requires a 'super' object but received a 'str' 错误

1、今天,学习子类的__init__()方法的时候报了一个错误:TypeError: descriptor '__init__' requires a 'super' object but received a 'str',具体代码如下: #子类的方法__init__() class Person(): """一个人类,作为父类""" def __init__(self,n...

茕夜 2万+

Windows 10下Carla 0.9.15安装避坑指南:从下载到运行的全流程解析

本文详细解析了在Windows 10系统上安装和运行Carla 0.9.15自动驾驶仿真平台的全流程。内容涵盖从系统环境准备、资源下载、Python依赖安装,到首次启动验证及常见错误(如DLL缺失、显卡驱动问题)的深度解决方案,旨在帮助用户快速搭建稳定的开发环境,并运行第一个自动驾驶Python脚本。

alice7model的博客 546

SAP UI5 和 Fiori 的一些小技巧合集 - 持续更新中

本文介绍笔者从事 SAP UI5 和 Fiori 开发多年以来,积累的一些经验和小技巧。会保持更新。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 913

【Python】子类问题super()漏|TypeError: descriptor ‘__init__‘ requires a ‘super‘ object but received a ‘str‘

Traceback错误提示11行,super.__init__(name,age,sex);这一行代码出现问题,错误信息是描述符‘__init__’需要一个‘super’对象,但接收到一个‘str’。

fengyuanas的博客 497

YOLOv11改进入门篇 | 手把手讲解改进模块如何实现高效涨点,以SimAM注意力模块为例

本文记录的是基于SimAM注意力模块的YOLOv11目标检测方法研究。SimAM注意力模块通过优化能量函数来获得每个神经元的三维权重,而或增加计算复杂度。若是有轻量化需求的小伙伴,无参的注意力模块也许是一个不错的选择。

Limiiiing的博客 9039

python学习第五节:用面向对象实现friendbook

课程视频链接 跟着麦叔学Python:https://b23.tv/Xx9NV0 1. 主程序 friend.py from cmd import * def print_usage(): print("欢迎使用FriendBook,您可以输入以下命令:") print("list: 显示名单") print("张三:查询张三的情况,李四同理") print("886: 退出") print_usage() while(True): cmd = input('请输入命令:') if(cmd

m0_46475409的博客 422

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

菜鸟初学python入门进阶第五节:面向对象,set与dict

python的set与dict1.dict的abc继承关系????2.再谈isinstance????3.dict的一些常见操作????4.dict的一些子类 上一篇的连接:菜鸟初学python入门进阶第四节:面向对象,自定义序列类 ❤⭐????????????????????????????✨????????✨✨老铁萌球球点赞???? 评论???? 乱打的也可以 1.dict的abc继承关系???? dict属于map类型 先看看源码 from collections.abc import Mappi

lafea的博客 469

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python 文件锁_学python第五节:python的基本编写方法

IPO是最基本的程序设计方法。Python编写方法思维导图如下:交互式和分布式运行方式:Python有两种运行方式:交互式和脚本式。交互式可以通过cmd命令行窗口或者IDEL实现,而脚本式通过写一个脚本(.py结尾的文档)实现。其中交互式主要用于简单的python运行或者测试调试python时用到,输入一行执行一行,而脚本式是运行python程序的主要方法。编写方法:IPO无论程序规模大小,每个程...

weixin_36019798的博客 209

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【我要学python】面向对象系统学习

第一节:初识类的定义和调用 c1.py #类 = 面向对象 #类 最基本作用:封装 #类中不仅可以定义变量 还可以定义函数等等,例: 1 class student( ): 2 name = ' ' 3 age = 0 4 5 def print_file(): 6 pass #类的实例化 1 s = student...

weixin_34138377的博客 125

第五节:独立接口测试,面向对象测试脚本,读取csv文件,并生成测试报告

原则: 一个接口的测试,对应一个类。便于后续的框架管理 类定义: 属性:接口访问地址,和一些固定的测试数据 方法:具体的测试方法过程

weixin_42976139的博客 220

python基础面向对象(类、继承反射)

python第五节课面向对象编程类 面向对象编程 编程 = 特定语法 + 数据结构 + 算法 函数式编程 面向对象编程 面向过程编程 面向对象编程将数据和操作数据的相关方法封装到对象中,组织代码和数据的方式更加接近人的思维,从而大大提高了编程的效率。 什么是对象 对象是内存中专门用来存储数据的一块区域 对象可以存储各种数据(数字、布尔、函数、类) 对象的组成成分 对象的标识:ID 对象的类型:type 对象的值:value 面向过程(top-down lang

qq_38874239的博客 473

【Python-1】 Python Syntax

1 第一节 1 Python介绍 1 Python是一个高效的语言,读和写的操作都是很简单的,就像普通的英语一样 2 Python是一个解释执行的语言,我们不需要去编译,我们只要写出代码即可运行 3 Python是一个面向对象的语言,在Python里面一切皆对象 4 Python是一门很有趣的语言 2 第...

藏经阁 | 玄苦 2310

python全套教程-老王Python全套教程完整版

课程目录PYthon基础篇基础篇1-福利课Python先入为主基础篇2-福利课Python先入为主下基础篇3-虚拟机安装xubuntu开发环境基础篇4-linux基本命令以及开发环境基础篇5-python基本数据类型讲解1.1基础篇6-福利课-python基本数据类型讲解1.2基础篇7-python基本数据类型讲解1.3基础篇8-python基本数据类型习题解答基础篇9-python基本数据结构-...

q6q6q的专栏 1312

python的设计目标_《Python程序设计》教学大纲

1Python程序设计Python programming课程代码:10906512040学时数:48(理论:32,实践:16)学分数:4执笔人:讨论参加人:审核人:一、教学目的《Python程序设计》的课程性质是普通高等学校计算机科学与技术本科专业的一门课程。该课程结合大学和大学生实际情况,全面介绍了Python语言的基本语法以及与当前主流语言Java等的异同,同时重点介绍了Python特有的字...

weixin_39992788的博客 790

Python基础知识总结

Python基础知识一文总览,纯干货分享

Insight__的博客 781

全套python进阶视频教程_Python基础+进阶+项目篇(高清无密),全套视频教程

从今天开始,每天分享一篇互联网资料,我也不知道大家需要什么资料,如果没有你需要的可以在后台留言,第二天会更新发布。imagesPython自身强大的优势决定其不可限量的发展前景。Python作为一种通用语言,几乎可以用在任何领域和场合,角色几乎是无限的。Python具有简单、易学、免费、开源、可移植、可扩展、可嵌入、面向对象等优点,它的面向对象甚至比java和C#.net更彻底。资源详情老王Pyt...

weixin_39802962的博客 720

python全套教学免费版_老王Python全套教程完整版

该楼层疑似违规已被系统折叠隐藏此楼查看此楼课程简介:本套教程为老王的python教程,分基础篇和进阶篇,可以帮助大家从基础学python。基础篇共22课,进阶篇共12课。零基础教学从最基础的知识点:数据类型,数据结构,语句 到 函数,面向对象,模块等。一步步将你带入python编程世界。课程讲师:老王讲师介绍:老王,用python开发相关的WEB应用,数据采集挖掘和SEO自动化程序。和同事用py...

weixin_39815435的博客 1224

python公开直播课_[直播]Python实战直播课程即将开始!免费!免费!免费!

第一节课 带你玩转Python基本语法课程描述本节课带领大家学习Python语言基础。讲解Python语言特性,Python中的基本数据类型,判断语句,循环语句以及使用场景。免费提供线上实训平台,只需要打开浏览器登录实训平台,就可以跟着老师一起实践操作哦!课后也可以做实验任务巩固课程哦!技术要求1、掌握python基本数据类型2、熟悉python中循环机制3、熟悉Pycharm开发工具讲解目的1、...

weixin_39928003的博客 503
上一篇: 第四节 python数据结构
下一篇: 第六节 Python正则表达式
江城子_Lay
博客等级 码龄9年 19粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值