面向对象的三大特征

Python面向对象三大特征 封装是将数据(属性)和操作数据的方法(行为)结合在一起,并限制外部对这些数据的直接访问。封装的主要目的是保护对象的内部状态,防止外部代码直接修改这些状态,进而提高代码的安全性和可维护性。继承是面向对象编程中一种重要的机制,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类可以重用父类的代码,从而减少代码的重复,提高代码的可维护性。多态是指同一操作作用于不同对象时,可以产生不同的结果。多态性使得面向对象的程序更加灵活和可扩展。封装、继承和多态是Python面向对象编程的三大特征。 阅读详情

1.面向对象的封装
封装:根据职责将属性和方法封装到一个抽象的类中

1.封装是面向对象编程的一大特点
2.面向对象编程的第一步,将属性和方法封装到一个抽象的类中
3.外界使用类创建对象,然后让对象调用方法
4.对象方法的细节都被封装在类的内部

如:
小明体重75.0公斤
小明每次跑步都会减肥0.5公斤
小明每次吃东西体重都会增加1公斤

class Person:
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight
    def __str__(self):
        return '我的名字是 %s 体重是 %.2f' %(self.name,self.weight)
    def run(self):
        print('%s 去跑步...' %(self.name))
        self.weight -= 0.5
    def eat(self):
        print('%s 吃东西...' %(self.name))
        self.weight += 1
xiaoming = Person('小明',75.0)
xiaoming.run()
print(xiaoming)
xiaoming.eat()
print(xiaoming)

例题1:

1.房子有户型,总面积和家具名称列表
	新房子没有任何的家具
2.家具有名字和战地面积,其中
	床:占4平米
	衣柜:占2平面
	餐桌:占1.5平米
3.将以上三件家具添加到房子中
4.打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表

做法:


```bash
class HouseItem:        ##创建家具的类
    def __init__(self,name,area):
        self.name = name
        self.area = area
    def __str__(self):
        return'[%s] 占 %.2f 平方' %(self.name,self.area)

class House:            ##创建房子的类
    def __init__(self,house_type,area):
        self.house_type = house_type
        self.area = area
        self.free_area = area   ##剩余面积,当没有家具时,总面积就是剩余面积
        self.item_list = []
    def __str__(self):
        return('户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s'
               %(self.house_type,self.area,self.free_area,self.item_list))
    def add_item(self,item):
        if item.area > self.free_area:
            print('%s 的面积太大,无法添加' %(item.name))
            return
        self.item_list.append(item.name)
        self.free_area -= item.area     ##计算剩余面积

##创建家具对象
bed = HouseItem('bed',4)
print(bed)
chest = HouseItem('chest',2)
print(chest)
table = HouseItem('table',1.5)
print(table)

##创建房子的对象
home = House('两室一体',100)
home.add_item(bed)
home.add_item(chest)
home.add_item(table)
print(home)

例子2:

1.士兵瑞恩有一把AK47
2.士兵可以开火(士兵开火扣动的是扳机)
3.枪 能够 发射子弹(把子弹发射出去)
4.枪 能够 装填子弹 ---增加子弹的数量

做法:

	class Gun():			##枪的类
	    def __init__(self,mode):
	        self.mode = mode
	        self.bullet_count = 0
	    def add_bullet(self,count):
	        self.bullet_count += count
	    def shoot(self):
	        if self.bullet_count <=0:
	            print('%s没有子弹~~' %self.mode)
	            return
	        self.bullet_count -= 1
	        print('%s~~~~~%s' %(self.mode,self.bullet_count))
	
	class Solder():			##人的类
	    def __init__(self,name):
	        self.name = name
	        self.gun = None
	
	    def fire(self):
	        if self.gun == None:
	            print('%s 没枪....'%(self.name))
	
	        self.gun.add_bullet(10)
	        self.gun.shoot()
	
##枪的对象
	gun = Gun('AK47')
	# gun.add_bullet(0)
	# gun.shoot()

##人的对象	
	solder = Solder('Ruien')
	solder.gun = gun
	solder.fire()

2、继承
1)继承:实现代码的复用,相同的代码不需要重复的写
子类继承父类,可以直接享用父类封装好的方法
子类可以根据自己特有,封装子类特有的属性和方法
如:

class Animal:
    def eat(self):
        print('eat')
    def drink(self):
        print('drink')
    def sleep(self):
        print('sleep')
class Cat(Animal):      ##继承父类
    def call(self):
        print('~~~~~')

##创建对象
mao = Cat()
mao.eat()
mao.call()

2)继承是可以传递的,具有传递性
当父类方法的实现不能满足子类的需求时候,
可以对方法进行重写(覆盖父类的方法)
也可以对父类方法进行扩展补充
如:

class Animal:
    def eat(self):
        print('eat')

    def drink(self):
        print('drink')

    def sleep(self):
        print('sleep')


class Cat(Animal):  			##继承父类
    def call(self):
        print('~~~~~')


class Hellokitty(Cat):
    def call(self):  			##对父类属性进行覆盖
        print('hahah')
        # Cat.call(self)     	##python2中
        super().call()  		##python3中,调用原本在父类中封装的方法


##创建对象
mao = Hellokitty()
mao.eat()
mao.call()

3)当继承多个父类时候,按顺序继承
4)式类和旧式类(经典类)
object是python为所有对象提供的基类,提供一些内置的属性和方法(可以使用dir函数查看)

新式类:以object为基类,python3中
旧式类:不以object为基类,在python2版本中

定义类时候,如没有继承,应该写成如下格式:
class A(object):

这样代码在各版本环境中都可以运行
3、多态
1)多态(以封装和继承为前提)
不同的子类对象调用相同的方法,产生不同的执行结果
如:

class Dog(object):
    def __init__(self,name):
        self.name =name
    def game(self):
        print('%s 开心的玩耍' %(self.name))

class Gaofei(Dog):
    """父类不能满足子类需求,重写game的方法"""
    def game(self):
        print('%s 来妲己一起玩耍吧' %(self.name))

class Person(object):
    def __init__(self,name):
        self.name = name
    def game_with_dog(self,dog):
        print('%s and %s 玩 *** ' %(self.name,dog.name))
        dog.game()                  ##等于说封装到类中


wangcai = Gaofei('wangcai')     ##创建一个狗对象
xiaoming = Person('xiaoming')   ##创建一个人对象
xiaoming.game_with_dog(wangcai) ##人和狗玩

2)类方法:针对类对象定义的方法 在类方法内部可以直接访问类属性或者调员工其他的类方法
类属性:针对类对象定义的属性 使用赋值语句在class关键字下可以定义类属性
类属性用于记录与这个类相关的特性
如:

class Toy(object):
    #使用赋值语句定义类属性,记录所有玩具的数量
    count=0
    def __init__(self,name):
        self.name = name
        #让类属性 +1
        Toy.count +=1

    @classmethod
    def show_toy_count(cls):
        print('玩具数量 :  %d' %(cls.count))
##创建玩具对象
toy1 = Toy('wa')
toy2 = Toy('ha')
toy3 = Toy('oo')
#调用类方法
Toy.show_toy_count()

3)静态方法:
在开发中,如果需要在一个类中封装一个方法 这个方法
既不需要访问实例属性或者调用实例方法
也不需要访问类属性或者调用类方法
这个时候,我们就可以把这个方法封装成一个镜头方法
如:

class Cat(object):
    @staticmethod
    def call():
        print('wahaha')

Cat.call()  #通过类名调用静态方法,不需要创建对象,直接就可以使用	

例子:设计一个Game类
1.查看帮助信息
2.查看历史最高分
3.创建游戏对象,开始游戏

class Game(object):
    top_score =10000
    def __init__(self,name):
        self.name =name
    @classmethod
    def show_high_score(cls):
        print('记录: %d ' % (cls.top_score))
    @staticmethod
    def help():
        print('help')
    def start_game(self):
        print( '%s play'  %(self.name))

    @staticmethod
    def adduser():
        print('add')
Game.help()
Game.show_high_score()
Game.adduser()
game = Game('wa')
game.start_game()

4)类的结构
术语–实例
1.使用面向对象开发,第一步是设计类
2.使用 类名() 创建对象,创建对象的动作有两步
1.在内存中为对象分配空间
2.调用初始化方法__init___ 为对象初始化
3.对象创建后,内存中就有了一个对象的实实在在的存在–实例
因此:
1.创建出来的对象叫做类的实例
2.创建对象的动作叫做实例化
3.对象的属性叫做实例属性
4.对象调用的方法叫做实例方法
在程序执行时:
1.对象各自拥有自己的实例属性
2.调用对象的方法,可以通过self
访问自己的属性
调用自己的方法
结论:
1.每一个对象都有自己独立的内存空间,保存各自不同的属性
2.多个对象的方法,在内存中之有一份,在调用方法时,需要把对象的引用传递到方法内部

5)私有属性和私有方法
应用场景及定义方式
应用场景
在实际开发中,对象的某些属性或方法可能只希望在对象的内部使用,
而不希望在外部被访问到
私有属性 就是 对象 不希望公开的 属性
私有方法 就是 对象 不希望公开的 方法
定义方法
在定义属性或方法时,在属性名或者方法名前增加两个下划线,
定义的就是私有属性或方法
如:

class Women(object):
    def __init__(self,name):
        self.name = name
        self.__age = 18     ##私有属性
    def secure(self):
        print(self.__age)   ##可以被写如其他共有属性中访问
man = Women('haha')
print(man.name)
##print(man.__age)      #外界不能直接访问
#私有属性和私有方法外界都不能直接访问
man.secure()
CAN 通信测试工具 canutils 概述 CAN,Controller Area Network,控制器局域网,一种高可靠性的现场总线。广泛用于汽车电子、工业控制通信。 canutils 工具包内含 5 个独立的程序:canconfig、candump、canecho、cansend、cansequence。这几个程序的功能简述如下: canconfig:用于配置 CAN 总线接口的参数,主要是波特率和模式。 candump... 阅读详情

相关推荐

A Super-Resolution Imaging Method for Forward-Looking Scanning Radar Based on Improved TV论文阅读

具体而言,作者提出了一种改进的总变差(Improved Total Variation, ITV)方法,通过引入。论文旨在解决前视扫描雷达(Forward-Looking Scanning Radar)超分辨率成像中传统。(Batch Processing),以增强图像边缘特征的保留能力,并提升计算效率。论文的核心创新点在于对传统TV正则化的邻域梯度计算进行扩展,提出。ITV剖面(图3d)在噪声下仍保持矩形边缘,仅存。​(公式10):实现稀疏约束。),抑制远端单元贡献。(幅度远低于目标)。

yangqoor的博客 1239

面向对象的三个基本特征

面向对象的三个基本特征是:封装、继承、多态。 [img]http://www.cnitblog.com/images/cnitblog_com/lily/1972/o_OOBase.gif[/img] 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的...

Tears of a poet 2807

Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)

蜡烛图指标为识别K线形态的指标,笔者认为重点在于定义方式所提供的思路,背后的投资逻辑可以借鉴但不建议直接参考文档的翻译内容和源码逻辑存在不一致的现象,笔者分别列出中文百科中的定义和源码实际逻辑,供大家参考技术分析理论中的一些模糊词,ta-lib中给出了精确的定义源码

量化就是探索生活 3254

Java - 面向对象的三大特征

面向对象编程的三大核心特征:封装、继承与多态。封装通过私有化属性并提供公共方法,实现数据隐藏与安全控制;继承使子类可复用父类代码,减少冗余,促进扩展;多态则允许同一接口在不同对象中表现出不同行为,提升程序灵活性与可维护性。三者共同支撑起高效、可维护的软件设计体系。

Hvitur的博客 1034

告别臃肿!保姆级教程:用NTLite深度精简Win10,打造你的专属纯净系统(附完整组件移除清单)

本文提供了一份详细的NTLite教程,帮助用户深度精简Windows10系统,移除冗余组件并优化性能。从准备工作到组件移除清单,再到系统配置优化和无人值守安装,逐步指导用户打造专属纯净系统。附完整组件移除清单和实战经验,确保系统稳定高效运行。

weixin_30945039的博客 855

VisionMaster -Group循环、数组数据格式化

这里创建一个格式化工具,按照自己想要的模式格式化刚刚输出的数据。因为是检测多个物体,所以这里选择输出的是数组。第一次的模板很不满意,反复调整参数也没好,边缘不整齐,强迫症患者受不了。实测如果输入设置太多,会导致模块失效,所以尽量选择需要的少量参数。这里要打开循环使能,循环数值就是高精度匹配的匹配个数。Group输出设置里选择刚刚建立的数据集。左边是主流程,右边是组合模块内部流程。修改采图这里的曝光值,图像提亮一点。建一个数据集,把想要的数据收集起来。用TCP助手测试一下OK。成功得到了想要的数据。

weixin_69505365的博客 4530

面向对象之三大特征

面向对象一共有三大特征:封装、继承、多态。

小高的博客 3080

手把手教你用Excel自动化处理G14大额风险暴露报表(含211版模板)

本文针对G14大额风险暴露报表(含211版)手工填报效率低、易出错的核心痛点,提供了一套基于Excel VBA的完整自动化解决方案。文章详细讲解了如何构建从数据采集、清洗、关联客户识别、风险暴露计算到自动化校验与归档的完整工作流,并附有可操作的代码示例,旨在帮助银行风控人员大幅提升报表处理效率与准确性。

weixin_29304985的博客 447

面向对象的三大特征(封装、继承、多态)

封装继承和多态

yu的博客 3万+

STM32低功耗模式下ADC采样抖动的5个隐藏陷阱及解决方案(实测避坑)

本文深入探讨了STM32低功耗模式下ADC采样抖动的5个常见陷阱及解决方案,包括多通道采样电压跃迁、外设开关信号稳定、低功耗模式与ADC时钟同步、输入阻抗失配以及基准电压稳定性问题。通过实测数据和优化代码示例,帮助工程师有效规避ADC采样数据抖动问题,提升物联网设备的测量精度和稳定性。

weixin_30316097的博客 381

Orange3实战教程:文本挖掘---标注语料库地图

Oreange3,文本挖掘,标注语料库地图用于在二维投影中可视化、聚类文档,并用关键词进行标注。

err2008的专栏 818

Python 面向对象的三大特征

本篇讲解面向对象的三大特征(封装,继承,多态),还有比较细致的(类属性类方法,静态方法),分步骤讲解,比较适合理清楚三大特征的思路。

2301_78209919的博客 2564

【QT开发教程】使用Qt进行蓝牙低功耗(BLE)编程

蓝牙低功耗(BLE,Bluetooth Low Energy)技术广泛应用于现代设备中,例如智能手表、健身追踪器和物联网设备。Qt提供了一套完整的Bluetooth模块,使开发者可以轻松地在应用程序中实现BLE通信功能。本文将介绍如何在Qt中进行BLE编程,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 2869

面向对象的三大特征——(概述)

面向对象的三大特征 一、封装: 将同一类事物的特征和功能包装在一起,只对外暴露需要调用的接口而已。想让你看到的你就看得到,不想让你看到的就见不到。对于封装也称为信息的隐藏,体现的最淋漓尽致的地方就是来定义接口了,在接口中我们没有任何功能的实现,只是定义了一系列抽象的方法声明。在Java中接口是体现封装最常用的方法 封装的好处: 1、实现专业的分工 2、减少代码的耦合 二、继承: 所谓继承是Java中面向对象最显著的一个特征,继承是从已有的类中派生出新的类,新的类可以吸收已有的属性、行为

Turniper的博客 3万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

面向对象三大特征

面向对象编程(OOP)的三大核心特征是封装、继承和多态。这些特征共同构成了Java语言的设计基础,帮助开发者构建模块化、可维护和可扩展的代码。

Donald_brian的博客 927

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

7.Java面向对象的三大特征1

7.Java面向对象的三大特征1 标签(空格分隔): 6Java基础 面向对象的三大基本特征 封装 继承 多态 一、封装 A、含义:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 B、封装的好处 1、只能通过规定方法访问数据 2、隐藏类的实现细节 3、方便加入控制语句 4、方便修改实现 C、设计原则: 把不想让外界知道...

weixin_43487902的博客 223

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

面向对象三大特征概述

面向对象三大特征:封装、继承、多态 封装 定义:封装就是隐藏对象的属性和实现细节,仅保留一些对外接口。 作用: 1.增强安全性:如果将对象的一些属性和实现细节加以隐藏,就意味着用户不能去访问这些被隐藏的部分,也就不能随意去更改,就减少了程序的出错甚至毁坏,而且被隐藏的部分通常是对象内部脆弱的部分。 2.简化编程:对于用户来说,他关心的只有他想知道的部分,如果将对象的全部属性和实现细节都展现在用户面...

codeshiz的博客 659

【面向对象的三大特征】

【面向对象的三大特征】 面向对象的三大特征有:封装,多态和继承。 我们先来了解一下这几个特征 —封装:是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性及行为,这个公布是可以有选择的公布给其他的对象,其他对象值能访问到公布的属性及行为。(在Java中可以使用private,protect和public三种修饰符对外部对象访问该对象的属性和行为进行限制)。 通俗一点来讲,就是将数...

weixin_44581452的博客 235

关于面向对象以及三大特征的解释

关于面向对象以及三大特征的解释面向对象:              在C语言编程中是面向过程而在Java编程中是面向对象的。面向过程更重要的是看重实现的具体过程,面向对象看重的是结果,不管其里面的具体过程,只看结果。               举一个例子:我们从住的地方到公司去上班的方法:一个是自己开车一个是打车                面向过程:就是相当于自己开车,自己需要去关注行驶的路...

hongjie_lin 5790

面向对象三大特征介绍

面向过程和面向对象区别 我们都常听到软件设计思想有面向对象和面向过程。那么什么是面向对象、什么是面向过程呢? 接下来我举个例子说明一下他们两者的区别。 有一天你想吃鱼香肉丝,怎么办,有两个选择。 第一:自己买鱼、肉丝、调料、胡萝卜等其他配菜,然后洗菜,开炒,装盘。 第二:去饭店,“老板,给我来一份鱼香肉丝”。 那么这两种有什么区别呢?很显然,第一种是面向过程思想,第二种是面向对...

海鸥 6119
上一篇: 面向对象
下一篇: 设计模式
Dead_LS
博客等级 码龄7年 6粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值