第五节 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类型。
ANSYS Workbench实战:用网格自适应搞定超弹性橡胶大变形仿真(附避坑命令流) 本文深入探讨了ANSYS Workbench中超弹性橡胶大变形仿真的网格自适应技术,重点解析了混合U-P单元的应用、非线性自适应网格的实战技巧及材料模型选择的注意事项。通过具体案例和命令流示例,帮助工程师有效解决橡胶仿真中的收敛问题和网格畸变挑战,提升仿真精度和效率。 阅读详情

相关推荐

Spring Boot应用Docker化实战:从Dockerfile编写到镜像推送完整流程

本文详细介绍了将Spring Boot应用Docker化的完整实战流程。从环境准备、项目审视,到编写高效且安全的Dockerfile,重点讲解了多阶段构建、镜像层优化、Spring Boot分层JAR等核心技巧,并涵盖了镜像构建、验证、调试以及最终推送至仓库并集成CI/CD的最佳实践,帮助开发者构建生产级Docker镜像。

butter的博客 1023

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

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

但行好事,莫问前程 2531

Bybit面经

这段总结描述了求职者在Bybit面试过程中的经历和相关问题,包括面试内容、求职者向面试官提问的问题以及关于Bybit的信息

郑泽洲的博客 2580

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

手把手教你用三菱PLC控制JET伺服原点:从硬件接线到GXWORKS3程序调试

本文详细介绍了如何使用三菱PLC控制JET伺服系统实现原点回归功能,涵盖硬件接线、参数配置到GX Works3程序调试的全流程。通过实战指南,帮助工程师快速掌握伺服控制技术,提升工业自动化项目的实施效率。

weixin_30642561的博客 535

从UE4到Unity:双叶高光技术在角色皮肤渲染中的移植全流程

本文详细解析了将UE4中的双叶高光技术移植到Unity引擎的全流程。该技术通过模拟皮肤油脂层和真皮层的不同反射特性,能显著提升角色皮肤渲染的真实感。文章从核心原理、贴图资产处理、Shader代码重构到参数调校,提供了完整的跨引擎移植实战指南,帮助开发者实现高质量的皮肤质感还原。

alice7model的博客 478

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

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

m0_62517923的博客 1239

红外基本数据观察需要用到的技巧

1.用ps查看Y8的数据,直接将Y8.raw格式拖动到ps中去。 2.用ps查看Y16数据,直接将Y16.raw拖动到PS中去。 3.Y16转Y8是将Y16的值(Y16的范围~32768–32767)映射到Y8的值(Y8的范围为0~255),步骤如下:1.按照Y16的大小排列并统计相同Y16出现的次数直方图; 2.根据抛点比例计算抛点个数,分别从前往后与从后往前...

阿锋的专栏 2630

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万+

STM32+ESP8266+MQTT协议连接阿里云物联网平台

一、环境介绍 单片机采用:STM32F103C8T6 上网方式:采用ESP8266,也可以使用其他设备代替,只要支持TCP协议即可。比如:GSM模块、有线网卡等。 开发软件:keil5 二、实现功能 通过阿里云物联网服务器实现设备数据远程上传、下发,实现数据交互。 在当前使用的开发板上有4盏LED灯、一个蜂鸣器、4个按键。 三、阿里云物联网服务器创建步骤 说明:如果没有账号的话,先点击网页右上角,注册一个账号,并完成实名认证再继续下一步。 产品名称根据自己情况填...

6万+

【系统架构设计师-2026上半年真题】案例分析-参考答案及详解(回忆版)

架构评估与设计:通过入侵检测系统的案例分析,阐述质量属性(性能/可用性/安全性/可修改性)的匹配方法,推荐管道-过滤器风格处理实时数据流,并设计8个核心构件实现数据采集到告警的全流程处理。 高并发优化方案: 分析悲观锁(排他锁/共享锁)与乐观锁的特性差异,提出乐观锁通过版本号/CAS实现,悲观锁适用于强一致性场景。 给出Redis优化三手段:分布式锁控制临界资源、Lua脚本保证原子操作、热点数据多级缓存,结合消息队列削峰填谷。 分层架构实践: 智

数据知道的博客 1684

【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

9.6华为OD机试真题 新系统 - 仓储货物有序出库 (Java/Py/C/C++/Js/Go)

9.6华为OD机试真题 新系统 - 仓储货物有序出库 (Java/Py/C/C++/Js/Go)

算法大师! 1201

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

菜鸟初学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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

weixin_36019798的博客 209

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【我要学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、付费专栏及课程。

余额充值