Python基础第13讲

编程入门 行业动态 更新时间:2024-10-17 04:55:25

Python<a href=https://www.elefans.com/category/jswz/34/1770030.html style=基础第13讲"/>

Python基础第13讲

Python基础第13讲 - 面向对象(2)

一、 面向对象 - 特殊方法(魔术方法)

 特殊方法都是以__开头__结尾的方法特殊方法不需要自己调用

 学习特殊方法1、特殊方法什么时候调用2、特殊方法有什么作用

 对于Person这个类name属性是必须,并且每一个实例对象的name属性是不一样的我们现在是将name属性手动添加特别容易出错

 对象的创建流程p1 = Person1、创建一个变量2、在内存中创建了一个新的对象3、执行类中的代码中的代码(只在类中执行一次)4、__init__方法执行了
'''
案例 1
'''
class Person:name = '葫芦娃'def speak(self):print('大家好,我是%s'%self.name)p1 = Person()
p2 = Person()
p1.speak()          # 大家好,我是葫芦娃
p2.speak()          # 大家好,我是葫芦娃
'''
优化 1
'''
class Person:def speak(self):print('大家好,我是%s'%self.name)p1 = Person()
# 手动向实例对象添加属性
p1.name = '葫芦娃'p2 = Person()
p2.name = '钢铁侠'
p2.speak()          # 大家好,我是美国队长p3 = Person()
p3.name = '洛萨'
p3.speak()          # 大家好,我是洛萨
'''
优化 2
'''
class Person:print('Person类中的代码')# 特殊方法不需要我们自己调用# 特殊方法会在特殊的时候自己调用(解析器调用)# init会在对象创建以后立即执行# init会向新创建的对象初始化属性def __init__(self):#self.name = '葫芦'# print(self)def speak(self):print('大家好,我是%s'%self.name)p1 = Person()
p2 = Person()
p3 = Person()
p4 = Person()p1.speak()
结果:   Person类中的代码大家好,我是葫芦
'''
优化 3
'''
class Person:print('Person类中的代码')# 特殊方法不需要我们自己调用# 特殊方法会在特殊的时候自己调用(解析器调用)# init会在对象创建以后立即执行# init会向新创建的对象初始化属性def __init__(self,name):# 通过self向新建的对象初始化属性self.name = name# print(self)def speak(self):print('大家好,我是%s'%self.name)p1 = Person('狐狸卡')
print(p1.name)
p2 = Person('钢铁侠')
print(p2.name)
#
p1.speak()
p2.speak()
结果:   Person类中的代码狐狸卡钢铁侠大家好,我是狐狸卡大家好,我是钢铁侠
类的基本结构
class 类名([父类])公共属性...对象的初始化方法__init__(self, .... ).....其他的方法def method(self,...):...

二、类的练习

属性:name color
方法:run() laba()
# 尝试定义一个表示车的类
class Car():def __init__(self,name,color):self.name = nameself.color = colordef run(self):print('车开始跑了')def laba(self):print('%s 嘀嘀'%self.name)c = Car('宝马','蓝色')
c.name = '奥迪'
c.color = '绿了'print(c.name,c.color)   
c.run()
c.laba()
结果: 	奥迪 绿了车开始跑了奥迪 嘀嘀
我们要增加数据安全性
1、属性不能修改(我让你改才能,不让改就不能改)
2、属性不能改为任意的值

三、面向对象 - 封装(可选择性修改)

3.1 封装是面向对象的三大特性之一(封装、继承、多态)

3.2 封装指的是隐藏对象中一些不希望被外部访问到的属性或方法

'''
没封装的
'''
class Dog:def __init__(self,name):self.name = named = Dog('二哈')
d.name = '凯撒'
print(d.name)
结果:   凯撒

如何隐藏对象中的一个属性
将对象的属性名,修改为一个外部不知道的名字
如何获取(修改)对象当中的属性
我们可以提供一个getter和setter方法可以访问和修改

使用封装,确实增长了类的定义复杂度,但是确保了安全性
1、隐藏了属性名,是调用者无法随意修改对象当中的属性
2、增加了getter和setter方法,可以很好的控制属性是否只读的如果希望属性是只读的,则可以直接去掉setter方法如果希望属性不能被外界访问,则可以 直接去掉getter方法
3、使用setter方法设置属性,可以增加数据的验证,确保数据的值是正确的
4、可以在读取属性和设置属性做一些操作
'''
封装后的
1、get_name名称可以成别的,但是return那句不能学错
'''
class Dog:def __init__(self,name,age):self.hidden_name = nameself.hidden_age = agedef speak(self):print('大家好,我是%s'%self.hidden_name)def get_age(self):return self.hidden_agedef set_age(self,age):if age > 0:self.hidden_age = agedef get_name(self):# get_name()用来获取对象的属性return self.hidden_namedef set_name(self,name):self.hidden_name = named = Dog('二哈',12)
# d.hidden_name = '凯撒'
# print(d.name)d.set_age(-20)						# 这个被条件过滤了,不起作用
d.speak()   						# 大家好,我是二哈d.set_name('凯撒')
d.speak()   						# 大家好,我是凯撒print(d.get_name(),d.get_age())     # 二哈 12

可以为对象的属性使用双下划线开头(__xxx)

双下划线开头的属性是对象的隐藏属性,隐藏属性只能在类的内部访问,无法通过外部访问
隐藏属性是python自动为属性改了一个名字
实际改的名字是:_类名_属性名 __name -> _Person__name
一般情况,使用一个下划线(_)开头的属性都是私有属,没有特殊情况不要修改私有属性
class Person:def __init__(self,name):self._name = namedef get_name(self):return self._namedef set_name(self,name):self._name = namep = Person('葫芦娃')
# p.set_name('傻逼')
# p.hidden_name = '黑猫警长'
# print(p.__name)
# print(p._Person__name)
p._Person__name = '黑猫警长'
p.__name = '黑猫警长'
print(p.get_name()) 		# 葫芦娃

五 @property 装饰器

用来将一个get方法 转换为对象的属性
添加property装饰器以后,我们就可以像的调用属性一个调用方法
class Person:def __init__(self,name):self._name = name@propertydef name(self):print('get方法执行了')return self._name@name.setterdef name(self,name):self._name = namep = Person('HY')
p.name= '滚个'
print(p.name)
结果:   get方法执行了滚个

更多推荐

Python基础第13讲

本文发布于:2024-02-13 02:36:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1690371.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:基础   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!