Python 面向对象

Python——面向对象 阅读详情

python其实也是一门面向对象语言,也有类 对象 的概念,也有继承的概念

创建类:

class ClassName:
   '类的帮助信息'   #类文档字符串
   class_suite  #类体:方法 变量等

构造函数:

def __init__(self):
可以有多个参数,创建类的实例后会自动调用该方法


实例化对象

对象=类名(参数)
如上面的t = Test()

访问类中成员

对象.成员 可以是成员函数也可以是类变量 
t.pri()  
print(t.count)

私有属性

__private:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private

添加、删除,修改 属性

可以给对象添加属性、修改属性、删除属性:

class Test():
    count = 0
    def pri(s):
        print(s)
        print(s.__class__)

t = Test()
t1 = Test()
t.new = 10;
print(t.new)
#print(t1.new)
t.count = 1;
print('t.count',t.count)
print('t1.count',t1.count)
del t.new
输出结果为:


注意注释掉的那行,不注释会报错,因为对象t有属性new而对象t1并没有

也可以使用以下函数的方式来访问属性:

  • getattr(obj, name[, default]) : 访问对象的属性。
  • hasattr(obj,name) : 检查是否存在一个属性。
  • setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
  • delattr(obj, name) : 删除属性。

内置类变量:

  • __dict__ : 类的属性(包含一个字典,由类的数据属性组成)
  • __doc__ :类的文档字符串
  • __name__: 类名
  • __module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
  • __bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
class Test():
    'this is doc'
    def pri(self):
        print('test!')
t=Test()
print(t.__doc__)
print(Test.__doc__)
print(Test.__name__)

类方法

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self,self代表类的实例,而非类

class Test():
    count = 0
    def pri(s):
        print(s)
        print(s.__class__)

t = Test()
t.pri()

输出的结果如下:
<__main__.Test object at 0x0000000001F28828>
<class '__main__.Test'>

虽然有些IDE会自动补充self,但这并不是python关键字,将其替换成其他的也可以,比如s,一样可以执行

私有方法同样是以两个下划线开头:def __PrivateMethod():


下划线:

单下划线 双下划线 头尾下划线:
  • __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。

  • _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *

  • __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了


类的继承

class 子类名(基类名):
  • 1、在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
  • 2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别在于类中调用普通函数时并不需要带上self参数
  • 3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)
  • python支持多重继承,用,隔开
  • class Parent():
        def __init__(self):
            print('parent init')
        def method(self):
            print('parent method')
        attr = 0
        def setAttr(self,att):
            attr = att;
            print(attr)
    class Child(Parent):
        def __init__(self):
            print('child init')
        def method(self):
            print('child method')
    
    c = Child()
    c.method()
    c.setAttr(5)
    输出:

  • Child中有init函数,故没有调用父类的init(子类的覆盖了父类的函数,也是多态的特征);若没有时,则会调用父类的Init。子类重写了method()方法。子类可以没有构造函数,表示同父类的构造函数一致,也可以有自己的构造函数,也可以选择调用父类的构造函数
  • class Child(Parent):
        def __init__(self,a):
            Parent.__init__(self)
            a = 1
            print(a)
        def method(self):
            print('child method')
    
    c = Child(5)
    输出结果为:
  • parent init
    1

  • 对比java继承时的构造函数:
  • “
    • 如果父类不主动创建构造函数则子类创建构造函数没有限制。
    • 如果父类创建不含参构造函数则子类创建构造函数没有限制且先执行父类的构造函数。
    • 如果父类创建含参构造函数则子类创建构造函数需要先super父类函数且先执行父类的构造函数。
    • 如果父类创建多个含参构造函数则子类创建构造函数需要先super指定的父类函数(如父类包含无参构造函数则子类可以不super父类函数同测试2)。
    ”
  • Python多重继承时,优先用层级靠近的类中的方法
  • issubclass() - 布尔函数判断一个类是另一个类的子类或者子孙类,语法:issubclass(sub,sup)
  • isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true。

  • 运算符重载

  • python支持运算符重载:
  • class Parent():
        def __init__(self,a,b):
            self.a =a
            self.b = b
        def __add__(self, other):
            return (self.a+other.a ,self.b+other.b)
        def __sub__(self, other):
            return (self.a - other.a, self.b - other.b)
    p = Parent(1,2)
    t = Parent(3,-4)
    print(p-t)#输出(-2,6)





【Python】Python面向对象详解 面向对象的官方解释“把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。知乎上比较有趣的解释一句话说明什么是面向对象?你个士鳖,你们全家都是士鳖!好像有人说过这样的话,当头棒喝的方式虽然情感上不易接受,但记忆效果十分显著。 阅读详情

相关推荐

PDDL入门

PDDL的组成部分 Objects:对象,世界上我们感兴趣的事物。 Predicates:谓词,我们感兴趣的事实(例如对象的属性),可以为真,也可以为假。 An initial state:初始化状态,我们开始所处的世界状态,即开始时为真的事物。 Goal specification:目标状态,我们想要结束的世界的状态,即我们希望最终成为真实的事情。 Actions/Operators:动作/操作,改变世界状态的方式,即发生的事情改变了事实。 PDDL语法 PDDL 文件的扩展名通常是.pddl 要

工控小白2021的博客 4821

python面向对象

python类详解,python类与对象

weixin_44992737的博客 1万+

DQN网络代码调用env.reset()后存储观测信息报错问题ValueError: setting an array element with a sequence.解决处理

**reset()函数返回的是一个array类型以及其中数据的type!模拟游戏进行学习任务。因此需要将observation指定为真正需要的array信息即可,得到的的变量observation类型与Agent存储时的。因此怀疑返回的observation有问题,于是通过。报错信息提示为数据维度不对应,也即最初通过。在强化学习DQN网络代码实现过程中,针对。

Vulcan_Q的博客 4093

【Python】Python 中的面向对象编程思想

一个思想、理论、逻辑。 独立于变成语言。理论来源于生活 、来源于人类的思考方式。 面向对象:适合解决大型、 复杂业务的项目 面向接口 面向过程 面向切片。

day day up 2807

信号完整性分析学习--16--传输线效应

传输线效应 说到传输线效应,大多数人都会想到一个经验法则,那就是: “当互连线的长度大于1/6倍的信号上升时间的空间延伸时,互连线就体现出传输线效应。” 上升时间越小越容易体现传输线效应。 由此可见,同一根互连线,它是否体现传输线效应,要看它要传输什么样的信号。下图所示,一根延时为15ps的互连线,当它传输上升时间为60ps的信号时就会体现传输线效应;当它传输上升时间为180ps的信号时就不体现传输线效应。

qq_29476769的博客 7277

避坑指南:LVGL在Arduino环境编译报错?3步搞定lv_conf.h路径问题(附ST7789屏幕调试技巧)

本文详细解析了在Arduino环境中配置LVGL图形库时,如何解决常见的“lv_conf.h file not found”编译报错问题。通过三步法:定位并复制模板文件、启用核心配置并指定路径、配置基础参数,从根本上解决路径问题。文章还结合ST7789屏幕驱动,分享了使用TFT_eSPI库进行显示适配、内存优化及背光控制等实战调试技巧,帮助开发者建立清晰、可维护的嵌入式UI工程基础。

lake5的博客 860

python是完全面向对象的语言_python是面向对象的语言吗

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。面向对象技术简介(推荐学习:Python视频教程)类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员:类变量...

weixin_35696071的博客 529

微信小程序推送微信服务号模板消息

微信小程序中发送微信服务号模板消息,无需用户手动确认订阅,无需绑定开放平台,无需使用UnionId。

qq_20751269的博客 1556

python面向对象基本思想

面向对象的思想 面向过程:—侧重于怎么做? 1.把完成某一个需求的 所有步骤 从头到尾 逐步实现 2.根据开发要求,将某些功能独立的代码封装成一个又一个函数 3.最后完成的代码,就是顺序的调用不同的函数 特点: 1.注重步骤与过程,不注重职责分工 2.如果需求复杂,代码会变得很复杂 3.开发复杂项目,没有固定的套路,开发难度很大 面向对象:–...

yangkaiorange的博客 1万+

【RTD】AD7793驱动程序

AD7793完整驱动程序,支持两线、三线、四线RTD。

只要思想不滑坡,想法总比问题多。 6175

100天精通Python(基础篇)——第22天:eval 函数基础以及危险警告

1. eval()函数的概念 2. eval()函数语法 3. 命名空间 4. 使用实例 1. 基本的数学运算 2. 字符串重复 3. 将字符串转换成列表 4. 将字符串转换成字典 5. 将字符串转成元祖 6. 与其它函数结合使用 7. globals参数案例 8. locals参数案例 5. eval函数的危险之处(重中之中)

努力让自己发光,对的人才能迎着光而来 15万+

python是不是面向对象语言,python是面向对象语言吗

Python究竟是不是面向对象的编程语言面向过程和面对对象是一种编程思想,不能说某某语言是不是面对对象或是面向过程,而是某某语言是否支持面对对象或面向过程。回归主题,python可以支持面对对象,但也可以支持面向过程,即使不支持面向对象的语言,比如c语言。python是面向对象的语言吗Python是一种面向对象、解释型、动态类型计算机程序设计语言 解释型:程序无需编译成二进制代码,而是在执行时对语...

weixin_35765226的博客 8688

【VTKExamples::PolyData】第十六期 GradientFilter

本文分享VTK样例GradientFilter,并解析接口vtkGradientFilter & vtkAssignAttribute,希望对各位小伙伴有所帮助!

qq_40041064的博客 319

Python面向对象

"""人类"""# 将 传入 的名字 赋值给 人类对象 的 姓名属性# 将 传入的 性别 赋值给 人类对象的 性别属性。# 将传入的出生日期 赋值给 人类对象的 出生日期属性。# 根据 类型 创建 该 类型的 对象# 在 类型的后面 添加 小括号 负责创建对象,实际上 会 自动调用 类中定义的 __init__() 方法person = Person("张三", "男", "1990-10-10")person.name = "张三丰"# 获取 对象的 名字# 获取 对象的 性别。

jay丿的博客 2077

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

Python面向对象基础

Python面向对象

m0_70882914的博客 2888

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python面向对象编程

本文介绍了Python面向对象编程的基础知识和三大特性。主要内容包括: 面向对象基础:阐述了类和对象的定义与关系,介绍了类的三要素(类名、属性、方法)及创建对象的方法。 三大特性之封装:重点说明了私有属性的定义和使用,包括如何在类内部访问以及通过特殊方式在外部访问私有属性(_类名__属性名)。 实例演示:通过洗衣机(Washer)和人类(Person)等多个具体示例,展示了类定义、实例化、属性访问等实际操作。 文章采用代码示例与理论解释相结合的方式,帮助读者理解Python面向对象编程的核心概念和使用方法

m0_54890849的博客 2179

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

python之面向对象总结

python之面向对象总结

weixin_51891232的博客 1570

Python面向对象的理解

python中一切皆为对象,类型的本质就是类!Python常用的数据结构如:List、tuple、dict、array、DataFrame或者Series等等都是类,类的实例就是对象。甚至连fp=open(’…/data/zhou.txt’)的句柄fp都可以作为(变量)对象传入函数。一切就是这么神奇!为了提高代码的复用性和更好的封装函数或变量的作用域,使用类再做一次封装会有用很多。 1.Pytho...

jp_zhou256的博客 1992

python——面向对象

语法格式1:# 公共的属性passpasspass语法格式2:# 公共的属性passpasspass实例化对象的语法:1》无参对象名 = 类名()2》有参对象名 = 类名(参数列表)例举# 设计类age = None# 创建对象# 给对象赋值student1.name = '小明'student1.gender = '男'# 获取对象中的信息。

2303_76544787的博客 1665

python中面向对象

面向对象 Object Oriented 面向对象的学习: 面向对象的语法(简单,记忆就可以搞定) 面向对象的思想(稍难,需要一定的理解) 面向过程和面向对象的区别 面向过程开发,以函数作为基本结构使用: 吃饭 -> 吃饭的函数 喝水 -> 喝水函数 洗衣服 -> 洗衣服的函数 睡觉 -> 使用充气娃娃的函数 看电影 -...

秋叶夏风的博客 631

Python中,什么是面向对象?

面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数 class是关键字,表示类 创建对象,类名称后加括号即可 面向对象的三大特性是指:封装、继承和多态。 想了解更多关于面对对象的相关内容...

weixin_38746918的博客 4593

【Python基础】Python面向对象编程

​ Python面向对象编程(简称OOP)是Python语言中最重要的特性之一。它是一种通过“对象”来设计软件的方法。它通过将数据和操作数据的方法封装在对象中,使得程序更加模块化、可重用和易于维护。它遵循一切皆对象的理念,可以将现实世界的事物使用类与实例进行模拟。​ 对于初学者来说,理解面向对象编程的基本原理和Python中的实现方式是非常有帮助的。本文旨在为初学者提供一个易于理解的Python面向对象编程介绍,并探讨其在实际编程中的应用和优势。什么是Python?

分享是一种境界,勤于分享,乐于分享! 2119
上一篇: Github--git的简单使用
下一篇: python pygame 入门 (一)
BeforeEasy
博客等级 码龄10年 92粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值