复习python面向对象

复习python面向对象

  • 1.面向对象定义
  • 2.类特殊方法
  • 3.封装
    • property装饰器
  • 4.继承
    • 多重继承
  • 5.多态
  • 6.属性和方法

1.面向对象定义

在讲面向对象之前,先来看看面向过程。
面向过程:将一个功能分解成一个一个小的步骤,通过完成一个个步骤来完成一个程序。
面向对象:关注的是对象,而不关注过程。它的编程思想是将所有的功能统一保存到对应的对象中,易于维护和复用。

class Person():# 在类中可以定义变量和函数name = 'swk'    # 公共属性,所有实例都可以访问def say_hello(self):print('你好!%s' % self.name)p1 = Person()
p2 = Person()p1.name = '猪八戒'
# 调用方法,对象.方法名()
p1.say_hello()

2.类特殊方法

特殊方法都以__开头,__结尾的方法。
特征:特殊方法不需要我们自己调用。
学习特殊方法:1.特殊方法什么时候调用 2.特殊方法有什么作用。

class Person:def __init__(self, name, age):self.name = nameself.age = age# 当我们打印一个对象时,实际上打印的是对象中的特殊方法__str__返回值    def __str__(self):return 'Person [name = %s, age = %s]'%(self.name, self.age)# __repr__作用:指对象在’交互模式‘中直接输出的效果def __repr__(self):return 'hello'# object.__lt__(self, other)    小于# object.__le__(self, other)    小于等于# object.__eq__(self, other)    等于# object.__ne__(self, other)    不等于# object.__gt__(self, other)    大于# object.__ge__(self, other)    大于等于def __gt__(self, other):return self.age > other.agedef say_hello(self):print('大家好!我是%s' % self.name)# del是一个特殊方法,它会在对象被垃圾回收前调用def __del__(self):print('Person()对象被删除了~',self)p1 = Person('孙悟空', 20)
p2 = Person('孙悟空', 15)
print(p1.name)
p1.say_hello()
print(p1)
print(repr(p1))
print(p1 > p2)
print(p2 > p1)p = Person('孙悟空', 20)
p = None   # 将a设置为None,此时没有任何变量要引用,它就变成垃圾
input('回车键退出...')

3.封装

封装指的是隐藏对象中一些不希望被外部所访问的属性或对象。
如何隐藏一个对象中的属性?

  • 将对象的属性名,修改为一个外部不知道的名字
    如何获取(修改)对象中的属性?
  • 需要提供一个getter和setter方法使外部可以访问到属性
  • getter获取对象中的指定属性(get_属性名)
  • setter设置对象中的指定属性(set_属性名)
    使用封装,确实增加了类的定义的复杂程度,但是它也确保了数据的安全性。
class Person:def __init__(self, name):self.__name = namedef get_name(self):return self.__namedef set_name(self, name):self.__name = namep = Person('mimi')
# print(p.__name)   # __开头的属性是隐藏属性,无法通过对象访问
# print(p._Person__name)     # 这样也可以访问到
print(p.get_name())
# 使用__开头的属性,实际上依然可以在外部访问,一般不用
# 一般我们会将一些私有属性以_开头,告诉别人不希望修改
class person:def __init__(self, name):self._name = namedef get_name(self):return self._namedef set_name(self, name):self._name = name
p = person('mimi')
print(p._name)

property装饰器

property装饰器,用来将一个get方法,转换为对象的属性。

class Person:def __init__(self, name):self._name = name# property装饰器,用来将一个get方法,转换为对象的属性# 添加为property装饰器以后,我们就可以像调用属性一样使用get方法@propertydef name(self):print('get方法执行了~')return self._name# setter方法的装饰器:@属性名.setter@name.setterdef name(self, name):self._name = namep = Person('nunu')
p.name = '孙悟空'
print(p.name)

4.继承

通过继承我们可以使一个类获取到其他类中的属性和方法。

class Animal:def run(self):print('动物会跑~')def sleep(self):print('动物睡觉~')# 通过继承我们可以使一个类获取到其他类中的属性和方法
class Dog(Animal):def bark(self):print('汪汪汪~')def run(self):print('狗跑~')d = Dog()
d.bark()r = isinstance(d, Dog)
print(r)
# 调用方法时,
#     会优先去当前对象中寻找,如果有则直接调用,
#     如果没有,则去父类中寻找,即就近原则
class A(object):def test(self):print('AAA')class B(A):def test(self):print('bbb')class C(B):def test(self):print('ccc')c = C()
c.test()

super()可以用来获取当前的父类

super().__init__(name)

多重继承

多重继承,就是我们可以为一个类同时指定多个父类

5.多态

多态:一个对象可以以不同的形态去呈现。

class A:def __init__(self, name):self._name = name@propertydef name(self):return self._name@name.setterdef name(self, name):self._name = nameclass B:def __init__(self, name):self._name = namedef __len__(self):return 10@propertydef name(self):return self._name@name.setterdef name(self, name):self._name = namea = A('孙悟空')
b = B('租八戒')def say_hello(obj):print('你好%s'%obj.name)say_hello(a)
say_hello(b)

面向对象三大特征:
封装:确保对象中的数据安全
继承:保证了对象的可扩展性
多态:保证了程序的灵活性

6.属性和方法

1.类属性
类属性,直接在类中定义的属性是类属性
类属性可以通过类或类对象的实例访问到
但是类属性只能通过类对象来修改,无法通过实例对象修改
2.实例属性
实例属性,通过实例对象添加的属性属于实例属性
3.类方法
在类内部使用@classmethod 来修饰的方法属于类方法。
4.实例方法
在类中定义,以self为第一个参数的方法都是实例方法。
类方法和实例方法区别:实例方法的第一个参数是self,而类方法的第一个参数是cls
5.静态方法
在类中使用@staticmethod来修饰的方法属于静态方法。
静态方法不需要指定任何的默认参数,静态方法可以通过类和实例去调用。

class A(object):# 类属性count = 0def __init__(self):# 实例属性self.name = '孙悟空'# 实例方法def test(self):print('test方法~~~', self)# 类方法@classmethoddef test_2(cls):print('test_2方法,它是一个类方法', cls)print(cls.count)# 静态方法@staticmethoddef test_3():print('test_3执行了~')a = A()
# 实例属性,通过实例对象添加的属性属于实例属性
# a.count = 10
A.count = 100
print(a.count)
print(A.count)
#     实例属性只能通过实例对象来访问和修改,类对象无法访问修改
# print(a.name)
# print(A.name)   # 报错
A.test_2()A.test_3()
a.test_3()

最近在找工作,希望能尽快找到自己满意的工作。也希望每个看我文章的人有好的未来。加油!加油!加油!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 中 $nextTick 的作用是什么?

目录 一、NextTick是什么 为什么要有nexttick 二、使用场景 三、实现原理 一、NextTick是什么 官方对其的定义 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM 什么意思呢? 我们可以理解成&#xff0c…

陪诊系统|陪诊小程序成品|陪诊系统功能

随着人们对健康的日益关注以及医疗技术的不断进步,陪诊小程序应运而生,通过提供陪同就医、医疗服务和健康管理等功能为患者和家庭成员提供了更多的便利和选择。本文将分析陪诊小程序的关键功能,以便更好地理解其在医疗领域的作用。 在陪诊小程…

闲鱼最新暴力玩法,靠低价渠道单日收益1000+,附详细实操及渠道

详情介绍 今天给大家分享的是最近非常爆火的,外面收费998的各大会员低价渠道项目,购买实操之后发现这个项目确实盈利,而且收益也不错,并把主要的低价渠道获取方式提供给大家

【C语言】动态分配内存

内存的五大分区 1、堆区(heap)——由程序员分配和释放, 若程序员不释放,程序结束时一般由操作系统回收。注意它与数据结构中的堆是两回事 2、栈区(stack)——由编译器自动分配释放 ,存放函数的…

【2024最新华为OD-C卷试题汇总】字符串分割(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 文章目录 前…

智能家居2 -- 实现网络控制模块

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 socket_interface.c #include <pthread.h>#include "socket_interface.h" #include "control.h" #include "socke…

由北京车展想到的,技术红利时代的“重启”

北京车展刚刚落幕&#xff0c;雷军和周鸿祎成为网红&#xff0c;国产品牌站上王座。与此同时&#xff0c;马斯克“光速”访华&#xff0c;FSD酝酿入华再掀新竞争。华为在车展前发布的智驾新品牌“乾崑”&#xff0c;同样在现场广受关注。它们的精彩&#xff0c;让燃油车羡慕。 …

【Vue】pinia

pinia 官网:https://pinia.vuejs.org/zh/ 搭建 pinia 环境 第一步&#xff1a;npm install pinia --save 第二步&#xff1a;操作src/main.ts import { createApp } from vue import App from ./App.vue/* 引入createPinia&#xff0c;用于创建pinia */ import { createP…

新一代智慧音视频平台,企业必备新基建

随着5G、云计算、实时音视频、多模态、大模型、数字人等前沿技术的发展&#xff0c;企业与客户的交互方式正加速趋于移动化、视频化。 国家有关部门也相继出台系列政策法规&#xff0c;确保线上业务安全合规&#xff0c;以保障消费者权益。如&#xff0c;针对保险、银行、证券…

C#语言进阶(四) 枚举器和迭代器

总目录 C# 语法总目录 枚举器和迭代器 枚举器和迭代器1. 枚举器2. 可枚举对象3. 迭代器4. 迭代器语义5. yield break 语句6. 组合序列 枚举器和迭代器 1. 枚举器 枚举器(Enumerator)是一个只读的且只能在值序列上前移的游标。 任何具有MoveNext方法和Current属性的对象都被称…

STM32快速入门(定时器之输入捕获)

STM32快速入门&#xff08;定时器之输入捕获&#xff09; 前言 本节主要讲解STM32利用通用定时器&#xff0c;在输入引脚出现指定电平跳变时&#xff0c;将CNT的值锁存到CCR寄存器当中&#xff0c;从而计算PWM波形的频率、占空比、脉冲间隔、电平持续时间等。其功能的应用有&…

QT_BEGIN_NAMESPACE

最近碰到了QT_BEGIN_NAMESPACE这个宏&#xff0c;这个宏就是一个命名空间&#xff0c;意思是如果不用这个宏&#xff0c;可能我qwidget定义的一个变量a会和标准C定义的变量a冲突对不&#xff0c;Qt通过这个命名空间&#xff0c;将所有类和函数封装在一个作用域里&#xff0c;防…

浅谈自己用过最好用的AI工具概括

个人最经常用的AI工具的其实是Copilot&#xff0c;但是也有别的一些最好用的AI工具&#xff0c;包括&#xff1a; OpenAI GPT-3&#xff1a;这是一个自然语言生成模型&#xff0c;具有强大的语言理解和生成能力。它可以用于各种任务&#xff0c;如文字生成、自动回复和文本摘要…

brpc profiler

cpu profiler cpu profiler | bRPC MacOS的额外配置 在MacOS下&#xff0c;gperftools中的perl pprof脚本无法将函数地址转变成函数名&#xff0c;解决办法是&#xff1a; 安装standalone pprof&#xff0c;并把下载的pprof二进制文件路径写入环境变量GOOGLE_PPROF_BINARY_PA…

K8S快速入门

K8S快速入门 在学习k8s的过程&#xff0c;虽然官网给出的示例教程很简单&#xff0c;但是由于网络和环境的差异&#xff0c;导致实际操作的时候踩了很多坑&#xff0c;下面记录一下自己的操作步骤&#xff0c;方便需要的人参考&#xff0c;也方便以后的自己。 参考官网的资料…

Windows 10 中使用 Montreal-Forced-Aligner (MFA) 实现音频和文本强制对齐

文章目录 一、实现目标二、安装 Montreal-Forced-Aligner1、使用 Anaconda 虚拟环境2、修改默认下载路径3、安装 montreal-forced-aligner 及相关第三方包4、验证是否安装成功 三、下载声学模型和发音词典1、命令行方式下载2、手动方式下载 四、强制对齐1、准备音频及对应文本2…

短视频矩阵系统电脑端/手机版双端加盟saas技术源头开发

短视频矩阵系统是为了帮助用户更高效地管理、编辑、发布和分析短视频内容而设计的综合性平台。这种系统通常包含电脑端和手机端两个部分&#xff0c;每个部分都有其特定的功能模型&#xff0c;以适应不同设备的操作习惯和使用场景。以下是根据搜索结果中提供的信息&#xff0c;…

Debian是什么?有哪些常用命令

目录 一、Debian是什么&#xff1f; 二、Debian常用命令 三、Debian和CentOS的区别 四、Debian和CentOS的优缺点 五、Debian和CentOS的运用场景 一、Debian是什么&#xff1f; Debian是一种流行的开源Linux操作系统。 Debian是一个以Linux内核为基础的操…

vue3 element-plus表单form验证规则设置的require:true无效

必填项为空校验&#xff0c;valid第一次为true&#xff0c;再点值为false 引入FormInstance &#xff0c;校验代码改为以下&#xff1a; import { ElMessage, FormInstance } from element-plus const ruleFormRef ref<FormInstance>()const submitForm async (formEl:…

python:机器学习特征优选(嵌入法)

作者:CSDN @ _养乐多_ 本文将介绍如何使用 python 语言使用嵌入法(Embedded Methods)进行机器学习特征优选。嵌入法包括LASSO回归、岭回归、决策树、随机森林、支持向量机。在本中,将重点介绍使用随机森林进行特征选择。 文章目录 一、特征数据1.1 将用于分析的数据从GEE下…