python面向对象二

【Python 函数和面向对象的实践应用】合肥工业大学python实验二题解 持续更新,新手代码勿喷. 题目: 第一题题解 n = int(input("请输入一个整数:")) num = int(n*(n+1)/2) j = 0 for i in range(65, 65+num): j += 1 print(chr(i), end=" ") if j == n: print() n -= 1 j = 0 第二题题解: m = str(input("输入m:")) n = str(input("输入n: 阅读详情

特殊方法(魔术方法)

  • 格式__方法__
  • 不需要我们自己调用,特殊方法在特殊的时候自动调用
class People():
    def __init__(self):
        print('init is executing')
p1 = People()
# init is executing

  1. 特殊方法什么时候调用?
  2. 特殊方法有什么用?
    对于People这个类name属性是必须的,并且每一个实例对象的name属性不一样
    我们想要修改打印出来的名字,就需要一个新的对象,name属性是手动添加的
    这样容易出错
class People():
    name = 'Batman'
    def Speak(self):
        print('你好我是%s'%self.name)
a = People()
a.Speak()
a.name = 'spiderman'
a.Speak()
# 你好我是Batman
# 你好我是spiderman

我们使用特殊方法
我们不把类内部写死,写入什么名字,就返回什么

对象的创建流程

p1 = Person

  1. 创建了一个变量p1
  2. 在内中创建了一个新的对象
  3. 执行类中的代码块中的代码(只在类中执行一次)
  4. __init__方法执行了
class People():
    # 特殊方法不需要我们自己调用
    # 特殊方法会在特殊的时候自己调用
    # init会在对象创建以后立即自动执行
    # init会向新创建的对象初始化属性
    def __init__(self,name):
        # 通过self向新创建的对象初始化属性
        self.name = name
    def Speak(self):
        print('你好我是%s'%self.name)
        
p1 = People('spiderman')
p1.Speak()
p2 = People('superman')
p2.Speak()
# 你好我是spiderman
# 你好我是superman

类的基本结构

class 类名([父类]):
公共属性…。
对象的初始化方法
def init(self,…)

尝试定义一个表示车的类

class Car():
    def __init__(self, name, color):
        self.name = name
        self.color = color
    def function(self):
        print('汽车启动了')
    def horn(self):
        print('%s滴滴滴'%self.name)
c = Car('BYD', 'black')
c.function()
c.horn()
print(c.function)
print(c.horn)
print(c.name, c.color)
c.name = 'Benz'
c.color = 'white'
c.function()
c.horn()
# 汽车启动了
# black的BYD滴滴滴
# <bound method Car.function of <__main__.Car object at 0x0000016E303ADA48>>
# <bound method Car.horn of <__main__.Car object at 0x0000016E303ADA48>>
# BYD black
# 汽车启动了
# Benz滴滴滴

要增加数据的安全性
1.属性不能随意修改(我允许你改才能改,不允许不能改)
2.属性不能改为任意的值
为此我们引入封装

封装

  • 封装是面向对象的三大特性之一(封装、多态、继承)
  • 封装指的是隐藏对象中一些不希望被外部访问到的属性或方法
class Cat():
    def __init__(self, name):
        self.name = name
d = Cat('英短')  
print(d.name)
d = Cat('小野猫')
print(d.name)
# 英短
# 小野猫

上面我修改了属性名name,d.name的属性就改变了,如果我不想让别人修改怎么办?
封装一

  • 将对象的属性名修改为一个外部不知道的名字
  • 该方法只能防君子不能防小人,事实上很难有一种办法将程序写死,不让别更改
class Cat():
    def __init__(self, name):
        self.hidden_name = name
d = Cat('英短')  
print(d.hidden_name)
d = Cat('小野猫')
print(d.name)
# 英短
# AttributeError: 'Cat' object has no attribute 'name'

  • 如果获取&修改对象当中的属性?
  • 我们提供一个getter和setter方法可以访问和修改属性,getter和setter是一种规范化
class Dog():
    def __init__(self, name, sex):
        self.hidden_name = name
        self.hidden_sex = sex
    def Shout(self):
        print('%s%s:汪汪汪'%(self.hidden_sex, self.hidden_name))
    def get_name(self):
        return self.hidden_name
    def get_sex(self):
        return self.hidden_sex
    def set_name(self, name):
        self.hidden_name = name
    def set_sex(self, sex):
        if sex == '公' or sex == '母':  # -----做一个判断,如果性别不满足公母,则不修改性别属性
            self.hidden_sex = sex
d = Dog('金毛', '母') # -----传入名字和性别
print(d.get_name()) # ----get方法,可以获取到属性
d.Shout()
d.set_name('哈士奇') #-----set方法,可以修改属性
print(d.get_name()) # ----get,获取新的属性
d.set_sex('公') # ------修改性别属性
print(d.get_sex()) # ----获取新的性别属性
d.Shout() # ---执行Shout方法
# 金毛
# 母金毛:汪汪汪
# 哈士奇
# 公
# 公哈士奇:汪汪汪

你会发现一个封装好的类,非常麻烦,原本可能只需要几行搞定的代码,现在却需要20行。写成一个类,在写的过程中非常麻烦,调用的时候非常简单,就像我们使用requests库一样,requests库是一个对象,我们不需关心该对象是怎么创建的,我们只需知道它有什么功能。

封装二

  • 可以为对象的属性使用双下划线开头__xxx
  • 双下滑线开头的属性是对象的隐藏属性,隐藏属性只能在类的内部访问,不支持外部访问
  • 隐藏属性是python自动为属性改了一个名字
  • 实际上改的名字是:_类名__属性名 __name–>_Hero__name
class Hero():
    def __init__(self, name):
        self.__name = name
    def Sing(self):
        print('%s:i\'ve benn reading books of old'%self.__name)
    def get_name(self):
        return self.name
    def set_name(self, name):
        self.__name = name
h = Hero('Achilles')
h.Sing()
h.name = 'Hercules'
h.Sing()
h._Hero__name = 'spiderman'
h.Sing()
# Achilles:i've benn reading books of old
# Achilles:i've benn reading books of old
# spiderman:i've benn reading books of old

一般我们不适用__name 的形式,通常我们使用_name 一个下划线,表示该属性是私有属性,没有特殊情况下不要修改

@property

用来将一个get方法 转换成属性
添加@property装饰器后,我们就可以像调用一个属性一样调用一个方法

class Myth():
    def __init__(self, name):
        self._name = name
    def Song(self):
        print('the legend and the myth')
    @property
    def get_name(self):
        print('我是一个方法,但不需加括号就可以显示我')
        return self._name
    @get_name.setter
    def set_name(self,name):
        self._name = name
m = Myth('batman')
m.get_name
m.name = 'zeus'
print(m.name)
# 我是一个方法,但不需加括号就可以显示我
# zeus

里面加入了@set_name.setter,可以向修改属性一样使用set方法

Python高级(二)_面向对象进阶 数据封装、继承和多态只是面向对象程序设计中最基础的3个概念。在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能。python是动态语⾔,动态编程语⾔ 是 ⾼级程序设计语⾔ 的⼀个类别,在计算机科学领域已被⼴泛应⽤。它是⼀类在 运⾏时可以改变其结构 的语⾔ :例如新的函数、对象、甚⾄代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语⾔⽬前⾮常具有活⼒例如,我们现在创建一个人的类,在这个类里面,定义了两个初始属性name和age。 阅读详情

相关推荐

python学习进阶之面向对象(二)

本文介绍了面向对象编程(OOP)的基本概念、语法和三大特征。面向对象以对象为核心,通过类封装属性和方法,对比面向过程编程具有更高的封装性。类是对事物的抽象描述,对象是类的具体实例。Python中使用class定义类,__init__方法初始化对象属性,self参数引用当前对象。面向对象的三大特征包括封装(将数据和行为封装在类中)、继承(子类继承父类特性)和多态(不同对象对同一方法的不同实现)。通过猫、狗等示例代码演示了类的定义、对象创建和属性方法调用,展示了面向对象编程的基本语法和应用场景。

weixin_48446170的博客 983

Python面向对象二

Python面向对象二一、类的特殊方法二、类的封装三、property装饰器 一、类的特殊方法 在类中可以定义一些特殊方法也称为魔术方法 特殊方法都是形如__xxx__()这种形式 特殊方法不需要我们调用,特殊方法会在特定时候自动调用 二、类的封装 出现封装的原因:我们需要一种方式来增强数据的安全性 1.属性不能随意修改 2.属性不嫩改为任意值 封装是面向对象的三大特性之一 封装是指隐藏对象中一些不希望被外部所访问到的属性或方法 我们也可以提供给一个getter()和setter()方法是外部可

wangkei_cn的博客 179

【Python刷题篇】——Python入门 011面向对象(二)

请为牛客网的员工创建一个Employee类,包括属性有姓名(name)、(salary),并设置初始化。同时该类包括一个方法printclass,用于输出类似'NiuNiu‘s salary is 4000, and his age is 22'的语句。

Python全栈系列 6059

python————面向对象(二)

面向对象 目录面向对象一、面向对象的理解1、python面向对象的重要术语:2、函数和面向对象编程的区别二、封装、继承、多态1、封装(Encapsulation)总结 一、面向对象的理解 简称:OOP,是一种编程的思想。OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数据的函数。面向对象的出现极大的提高了编程的效率,使其编程的重用性增高。 1、python面向对象的重要术语: 1、多态(polymorphism):一个函数有多种表现形式,调用一个方法有多种形式,但是表现出的方法是不一样的。 2、

langchaop的博客 243

华为EC6110系列(3798mv310芯片)强刷固件全解析:从准备到实战

本文详细解析了华为EC6110系列(3798mv310芯片)强刷固件的全过程,从准备工作到实战步骤,包括固件特点、刷机工具准备、详细刷机步骤及常见问题解决方案。适合想要提升盒子性能的用户参考,特别强调了刷机过程中的注意事项和实用技巧。

rock5的博客 733

ITIL 4 Foundation 自学通关笔记1

ITIL 4 Foundation 自学通关笔记

m0_58817196的博客 955

Python(二)函数的面向对象

在python中使用class关键字创建一个类。name = '张三'passpass# 实例化对象s1 = Stu()s2 = Stu()① __init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会自动调用该方法。不是必须要定义的,可以在需要的时候再定义。② self是一个参数,表示对象自身【对象的id号】,里面存放着对象自身的地址。如果希望类中的方法可以被对象调用,第一个参数必须是self。

qq_56444188的博客 821

UniApp实现多端支付功能完整实现指南

支付业务流程多端支付实现安全性保障异常处理最佳实践支付基础知识多端支付实现统一支付封装安全性处理异常处理最佳实践根据具体业务场景选择合适的支付方式注重安全性和用户体验做好异常处理和日志记录持续优化和改进支付流程关注我,持续分享前端项目开发经验!

weixin_63454527的博客 2129

python如何实现的面向对象_Python之面向对象二

面向对象的三大特性:继承继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类python中类的继承分为:单继承和多继承classAnimal:def __init__(self,name,aggr,hp):self.name=nameself.aggr=aggrself.hp=hpself.func()deffunc(self...

weixin_39632693的博客 115

Palantir Vertex:数字孪生模拟与决策系统深度指南

Palantir Vertex是Foundry系统中的核心数字孪生模块,本质上是一个决策模拟器而非简单的数据可视化工具。它基于本体层构建,通过对象关系网络模拟现实世界实体,填补数据模型与业务决策间的鸿沟。核心功能包括:创建隔离的沙盒场景进行假设测试、修改参数模拟不同干预方案、对比虚实数据发现异常,并最终将最优决策回传至业务系统。典型应用场景涵盖供应链韧性评估、资产维护优化和应急方案制定等,帮助用户在复杂环境中做出更优决策。

轩哥的个人研究和成长记录 894

使用 Python 实现无人机避障的人工势场算法

人工势场算法是一种基于力的控制方法,通过将目标位置视为一个吸引力源,而将障碍物视为排斥力源,来引导移动体朝着目标前进,同时避开障碍物。接下来,我们将定义几个类来实现人工势场算法,包括无人机类、障碍物类和势场类。

闲人编程的博客 2586

Python面向对象(二)面向对象在Python中的实践

面向对象在Python中的实践

博客 231

学习记录(十一)--Pattern Recognition投稿记录

上一周特别忽然通知统计建模要答辩,确定是否晋级国赛,一直在准备答辩的事情,所以上一周没有总结周汇报,深刻检讨!!!不过结果是好的,我们组第二名晋级哦。这周主要是跟大家分享一下我投稿PR(Pattern Recognition)的一个时间线,以及投稿后的工作。一、PR从投稿到接收的时间线2025.4.3 Major Revision(ddl4.23) 当时正在弄比赛和另一个着急推进的文章2025.5.30 Minor Revision 这次小修基本上只有一些格式和简单一点点问题。

qq_54949944的博客 1923

二、python面向对象高级

本文系统介绍了Python面向对象编程的三大特性:封装、继承和多态。封装通过私有化属性和方法提高代码安全性,并提供了访问接口;继承包括单继承、多继承及方法重写,讲解了MRO机制和super()调用;多态通过继承和重写实现同一方法的不同表现。此外还介绍了类属性与对象属性的区别,以及类方法和静态方法的使用场景。这些特性共同构成了Python面向对象编程的核心,提高了代码的复用性、安全性和扩展性,为构建复杂系统提供了有效工具。

coding 972

OpenClaw Windows 最详细安装指南

Windows上养龙虾:OpenClaw完整安装教程+钉钉接入,助你养只大龙虾

weixin_43405859的博客 2215

[系统安全] 三十二.恶意代码检测(2)常用技术详解及总结

前文从产业界和学术界分别详细讲解恶意代码攻击溯源的相关知识,在学术界方面,用类似于综述来介绍攻击追踪溯源的不同方法;在产业界方面,主要参考李东宏老师从企业恶意样本分析的角度介绍溯源工作。这篇文章将详细总结恶意代码检测技术,包括恶意代码检测的对象和策略、特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术和主动防御技术。希望这篇文章对您有所帮助,如果文章中存在错误、理解不到位或侵权的地方,还请告知作者与海涵。且看且珍惜,加油~

杨秀璋的专栏 1万+

python(二)之面向对象

python之面向对象一、面向对象二、类和对象三、@property装饰器四、__slots__魔法五、静态方法和类方法六、继承 一、面向对象   之前我们说过"程序是指令的集合",我们在程序中书写的语句在执行时会变成一条或多条指令然后由 CPU 去执行。当然为了简化程序的设计,我们引入了函数的概念,把相对独立且经常重复使用的代码放置到函数中,在需要使用这些功能的时候只要调用函数即可;如果一个函数的功能过于复杂和臃肿,我们又可以进一步将函数继续切分为子函数来降低系统的复杂性。但是说了这么多,不知道大家是否发

faramita_of_mine的博客 359

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python-11 面向对象二

文章目录1. 特殊方法2. 封装3. property装饰器 1. 特殊方法 在类中可以定义一些特殊方法也称为魔术方法 特殊方法都是形如 xxx()这种形式 特殊方法不需要我们调用,特殊方法会在特定时候自动调用 2. 封装 出现封装的原因:我们需要一种方式来增强数据的安全性 属性不能随意修改 属性不能改为任意的值 封装是面向对象的三大特性之一 封装是指隐藏对象中一些不希望被外部所访问到的属性或方法 我们也可以提供给一个getter()和setter()方法是外部可以访问到属性 getter()

风华绝代的博客 213

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Python】面向对象(二)

摘要:本文系统介绍了面向对象编程中的继承机制,包括单继承、多继承、多层继承等多种形式。重点讲解了继承的概念、方法重写、super()函数的使用以及方法解析顺序(MRO),并通过Python代码示例展示了不同继承方式的应用场景。文章还阐述了继承与多态的关系,说明如何通过继承实现代码复用和功能扩展。最后简要介绍了多重继承的概念及其典型应用场景。

m0_72516377的博客 946

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python 面向对象(二)

Python 的面向对象和其他语言不一样,python的class术语与c++有一定区别,与 Modula-3更像。 1 设计面向对象 设计分成下面的两个方面,一定要先设计,找好对象,找类 1 面向对象程序设计 OOD - 找对象-->找类(归纳对象共同的特征和技能,每个对象独有的特征) 2面向对象程序编程OOP - 先定义类--实例化对象 1.1 面向对象的作用 可扩展性性强,...

dianyi3179的博客 77

11python之面向对象二

1.特殊方法 在类中定义一些特殊方法也称为魔术方法 特殊方法都是形如_xxx_()这种形式 特殊方法不需要我们调用,特殊方法会在特定时候自动调用 2.封装 出现封装的原因:我们需要一些方式来增加数据的安全性 。1.属性不能任意的修改 。2.属性不能改为任意的值 封装是面向对象的三大特征之一 封装是指隐藏对象中一些不希望被外部所访问的属性或方法 我们也可以提供一个getter()和setter()方法是外部可以访问的属性 。getter()获取对象中指定的属性 。seterr()用来获取对象中指定的属性

hanyidong123的博客 163

Python面向对象(二)

访问属性及方法类通过函数(在class语句内由def语句编写的)为实例提供行为。因为这种嵌套的def会在类中对变量名进行赋值,实际效果就是把属性添加到类对象之中,从而可以由所有实例和子类继承。 这种def语句块出现在内内部时,通常就叫方法,而且会自动接收第一个特殊参数(通常为self),这个参数提供了被处理的实例的参照值,并且一定是明确写出来的。 访问对象的属性及方法,需要使用(.)来访问。如果

另一个自己 994

python语言是面向对象的对吗_Python语言面向对象(二)

本文主要向大家介绍了Python语言面向对象(二),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。python魔术方法:魔术方法是面向对象Python语言中的一切。它们是你可以自定义并添加“魔法”到类中的特殊方法。它们被双下划线环绕(比如init或lt)。实例一、python实例化过程首先调用new方法,返回一个Programer对象,然后把Programer对象交给init,...

weixin_39915427的博客 197

二、python面向对象编程

面向对象语言 面向对象语言(Object-Oriented Language)是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分,有识认性、多态性、类别性和继承性四个主要特点。 python具备这些特点,所以它是面向对象语言。 面向对象编程 面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的

weixin_43431593的博客 264

python面向对象编程二

三、属性和方法 •类由成员变量(对应于对象的属性)和成员函数(对应于对象的方法)组成。属性是对数据的封装,方法则表示对象具有的行为。 •Python的构造函数、析构函数、私有属性或方法都是通过名称约定区分的。 此外,Python还提供了一些有用的内置方法,简化了类的实现 1、类的成员属性 •Python的类的成员一般分为私有属性和公有属性,像C++有定义属性的关键字(public、pri...

lhaniey的博客 930
上一篇: python面向对象一
下一篇: python面向对象三
shell-x
博客等级 码龄7年 16粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值