day:24 python——类的三大特性

news/2025/3/18 19:46:38/文章来源:https://www.cnblogs.com/junting/p/18779632

python三大特性:封装,多态,继承

一、封装:

1、封装:封装就是隐藏对象一些不希望外部所访问到的属性和方法,保证安全

2、概念:指的是在设计时,不对外提供,隐藏起来,提供公共方法以外对其方法就是把属性和方法封装到一个抽象的类中,

3、封装相当于一个黑盒子,我们将事务相关的属性和方法封装在一个类中,在调用类创建实例,不用关注内部代码的实现细节,我们只要调用结果就可以。

4、封装的优点:
(1)封装数据可以很好的保护隐私、
(2)封装方法主要原因是隔离复杂度
(3)封装提高了代码的复用性
(4)隐藏对象的属性和实现细节,提供公共方法对其访问

5、python中类的封装分为两种
(1)公用(共用)
类中变量和方法公用,他们名称前没有下滑线,共有的变量和方法,在类的外部,内部以及子类都可以调用

数据封装

方法封装

(2)私用
在类中变量和方法中,___下滑线开头命名,则改变变量或方法为私用,私有的变量和方法,只能在内部使用,类的尾部以及子类都无法使用。
私有属性:格式 ___属性名 =值 在类的外部不能使用(对象不能调用属性)

私有化封装后的限制:

a、类可以访问

b、类外,对象外 不可访问

c、子类和子类的对象 可访问

案例一:

代码:
class Lei(object):
a=20 #类变量
def init(self,a,b): #构造函数,初始化作用
self.__a=a #实例变量
self.b=b #实例变量
def fs1(self): #方法1
print(self.a+1) #
def __fs(self): #方法2
print(self.b+2)
def fs3(self): # 方法2
print(self.__fs())
if name == 'main':
dx=Lei(1,2) # 创建类的而对象 ,1,2就是一个实例
# dx.fs() ##通过类的对象.调用方法2
dx.fs3()
dx.fs1() #通过类的对象.调用方法
print(dx.a) #通过对象调实例变量
print(dx.b) #通过对象调实例变量

案例二:

class People(object):
def init(self,name):
self.__name = name
def setName(self,newname):
self.__name = newname
def getName(self):
return self.__name
if name == 'main':
p = People("xiaowang")
# print(p.__name) #报错
p.setName("xiaoming")
print(p.getName())

二、继承:

1、继承:类的继承是面向对象程序设计的一个重要思想,继承时子类可以继承父类的内容,包括成员变量和成员函数。

2、在继承中一个类被另外一个类继承这个类称之为父类也称之为基类,则另外一个类则为子类也称之为派生类

案例1:

class F(object):
def fh(self):
print("富豪")
def fang(self):
print("房")
def che(self):
print("车")
class M():
def fp(self):
print("富婆")
def qian(self):
print("qian")
def kuang(self):
print("kuang")
class s():
def qg(self):
print("乞丐")
if name == 'main':
fdx=F()
fdx.che()
fdx.fang()
fdx.fh()
mdx=M()
mdx.fp()
mdx.kuang()
mdx.qian()
sdx=s()
sdx.qg()

继承:

案例:单继承(继承一个类)

class F(object):
def fh(self):
print("富豪")
def fang(self):
print("房")
def che(self):
print("车")
class M():
def fp(self):
print("富婆")
def qian(self):
print("qian")
def kuang(self):
print("kuang")
class s(F):
def qg(self):
print("乞丐")
if name == 'main':
fdx=F()
fdx.che()
fdx.fang()
fdx.fh()
mdx=M()
mdx.fp()
mdx.kuang()
mdx.qian()
sdx=s()
sdx.qg()
sdx.fh()
sdx.fh()
sdx.che()
sdx.fang()
案例:多个类继承

class F(object):
def fh(self):
print("富豪")
def fang(self):
print("房")
def che(self):
print("车")
class M():
def fp(self):
print("富婆")
def qian(self):
print("qian")
def kuang(self):
print("kuang")
class s(F,M):
def qg(self):
print("乞丐")
if name == 'main':
fdx=F()
fdx.che()
fdx.fang()
fdx.fh()
mdx=M()
mdx.fp()
mdx.kuang()
mdx.qian()
sdx=s()
sdx.qg()
sdx.fh()
sdx.fh()
sdx.che()
sdx.fang()
sdx.kuang()

三.多态

1、多态是以继承和重写父类方法为前提,对所有子类实例化产生的对象调用相同的方法,执行产生不同的执行结果。

2、例如同样是人,但是当问起一个人的职业时会有不同的结果,可能是软件测试工程师,可能是HR

3、一个对象的属性和行为不是由他所继承的父类决定的,而是由其本身包含的属性和方法决定的

案例1:

class Cc(object):
def cs(self,x,y):
print(x+y)
if name == 'main':
c=Cc()
c.cs(1,2) #数值
c.cs("1","2") #字符
c.cs(" 杭州","多测师") # 汉字

案例2:
class A(object):

def  talk(self):print("我是动物")

class Cat(A):

def  talk(self):print("喵喵")

class Dog(A):

def talk(self):print("汪汪")

if name == 'main':

c=Cat()c.talk()d=Dog()d.talk()

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

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

相关文章

探秘Transformer系列之(15)--- 采样和输出

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer系列之(15)--- 采样和输出 目录探秘Transformer系列之(15)--- 采样和输出…

c语言02_数据类型上

一、c是怎么变成汇编的 1、裸函数是编译器不管的 ⑴写一个空函数(里面什么都不写),f7f5打开反汇编f11打开jmp什么都没写里面还是有一大堆(是编译器和连接器做的)⑵裸函数f7f5查看反汇编找到调用的函数0040D708f11打开再f11打开,里面一行汇编代码都没有⑶ ①空函数 f7f5运…

win11家庭版24H2,使用VMware虚拟机问题

一、安装VMware,提示 “安装程序检测到主机启用了 Hyper-v或 Device/credential Guard。。。”,我勾选了自动安装WHP后点击下一步,完成了VMware的安装。二、解压了一个虚拟机,用VMware打开并选择已复制虚拟机,出现“此平台不支持虚拟化”的错误,点击“是”也无法打开虚拟…

M-LAG

一、M-LAG简介 1.1 M-LAG使用场景​ M-LAG(Multichassis Link Aggregation Group)即跨设备链路聚合组,是一种实现跨设备链路聚合的机制。M-LAG主要应用于普通以太网络、VXLAN和IP网络的双归接入,可以起到负载分担或备份保护的作用。相较于另一种常见的可靠性接入技术——堆…

FastAPI测试策略:参数解析单元测试

扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长 探索数千个预构建的 AI 应用,开启你的下一个伟大创意第一章:核心测试方法论 1.1 三层测试体系架构 # 第一层:模型级测试 def test_user_model_validation():with pytest.raises(ValidationError):User(age=-5)…

MSTP协议

一、MSTP(多生成树协议)简介 1.1 MSTP(多生成树协议)使用场景MSTP(Multiple Spanning Tree Protocol,IEEE 802.1s), 基于 RSTP 的多实例扩展协议,通过划分多个生成树实例(MSTI)实现 VLAN 与生成树的灵活映射,在保留 RSTP 快速收敛特性的基础上,支持 多拓扑负载均衡…

Eth-Trunk协议

一、Eth-Trunk(链路聚合协议)使用场景 1.1 Eth-Trunk(链路聚合协议)简介​ 原名叫链路聚合组(Link Aggregation Group),通过将多个物理接口捆绑为一个逻辑接口,可以在不进行硬件升级的条件下,达到增加链路带宽的目的。1.2 Eth-Trunk(链路聚合协议)实现目的增加带宽链…

PPP协议

一、PPP(点对点协议)简介 1.1 PPP使用场景​ 我们家庭中使用最多的宽带接入方式就是PPPoE(PPP over Ethernet)。这是一种PPP利用以太网(Ethernet)资源,在以太网上运行PPP来对用户进行接入认证的技术,PPP负责在用户端和运营商的接入服务器之间建立通信链路。二、PPP(点…

以太帧格式

一、以太帧使用场景 1.1 Ethernet Ⅱ以太帧简介​ Ethernet II(又称 DIX 2.0)是最广泛使用的以太网帧格式,由DEC、Intel和Xerox在1982年标准化,是TCP/IP网络中最常见的链路层协议。1.2 Novell Netware 802.3 Raw以太帧简介​ 这是 1983 年 Novell 发布其划时代的 Netware/8…

单臂路由

一、单臂路由简介 1.1 单臂路由使用场景​ 单臂路由(Router-on-a-Stick)是一种通过路由器单个物理接口的多个逻辑子接口实现不同VLAN间通信的解决方案,其核心是利用802.1Q协议在交换机的Trunk链路传输多VLAN流量,路由器通过子接口为每个VLAN分配网关并完成跨网段路由。该方…

Windows 提权-服务_弱服务权限

本文通过 Google 翻译 Weak Service Permissions – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0 前言 1 搜寻非标准服务1.1 cmd 1.2 powershell2 搜寻服务的弱权限2.1 枚举服务的弱权限:手动 2.2 …

前端html+css+js

之前只知道html和css,不知道可以用js设置事件监听,一些输入判断条件就不知道怎么写,上了web课程后有所了解 这是此次作业代码是ai生成的,不过可以凭自己大致看懂,加上ai的解释和课堂ppt有所收获点击查看代码 <!DOCTYPE html> <html lang="zh"> <…