python面向对象——类(中)


python面向对象——类(中)

  • python面向对象——类(中)
    • 1. 初始化方法(魔术方法__ xxx__() )
    • 2. 类的封装
    • 3. 装饰器(property )
    • 总结

1. 初始化方法(魔术方法__ xxx__() )

  • 在类中形如__xxx__()这种形式的方法,被称之为模塑方法(特殊方法 或 初始化方法),这种初始化方法不需要我们调用,它会在特定的时候自动调用。
class MyClass():    #定义一个类# name = '刘亦菲'def speak(self):   #定义方法print('大家好,我是%s'%self.name)p1 = MyClass()   #类的实例化
p1.name = '刘亦菲'
p1.speak()     #在没有定义类的公共属性的情况下会报错,
# 两种的定义公共属性的方法:
# 1.通过 对象.属性    如:p1.name = '刘亦菲'
# 2.在类里面定义      如:类里面的 name = '刘亦菲'#'使用初始化方法解决的问题:'
#问题: 1.手动添加容易忘记,查看代码需要那些参数比较麻烦
#      2.没有提示,可以创建成功实例,会导致后面的代码运行出错
class Preson():       #定义一个类#初始化方法def __init__(self,name,age):       #实例化创建的时候,init方法就会报错self.name = nameself.age = agedef speak(self):print('大家好,我是{},永远{}'.format(self.name,self.age))name = input('请输入姓名:')
age = input('请输入年龄:')
p1 = Preson(name,age)       #类的实例化
p1.speak()

2. 类的封装

  • 出现封装的原因:是为了数据的安全,形成了一个默认的规则。告诉你的协同开发者这个属性很重要,不要随意修改
class Car():                              #定义一个类#初始化方法def __init__(self,name,color):  self.hidden_name = nameself.color = colordef run(self):print('汽车开始跑起来了')def dida(self):print('汽车鸣笛')car = Car('兰博基尼','红色')    #类的实例化
car.name = '中华田园犬'
car.run()    #调用方法
car.dida()

封装是面向对象的三大特性之一

  • 封装是指将对象内部的一些属性和方法进行隐藏,不被别人轻易的访问或修改。
# 封装:私有属性
class Car():def __init__(self,name,color):self._name = name     #私有属性,一般使用这个私有属性,属于商议协定self.color = colordef run(self):print('汽车开始跑起来了')def dida(self):print('汽车鸣笛')car = Car('法拉利','红色')
car._name = '中华田园犬'
car.run()
car.dida()
  • 类也提供了getter()和setter()方法实现外部可以访问到封装类的属性。
    • getter() 获取对象中指定的属性
    • setter() 用来设置对象指定的属性
class Car():def __init__(self,name,color):self._name = name     #私有属性,一般使用这个私有属性,属于商议协定self.color = color#getter方法:提供访问这个属性的方法def get_name(self):return self._name#setter方法:提供修改属性的方法def set_name(self,name):self._name = namedef run(self):print('汽车开始跑起来了')def dida(self):print('汽车鸣笛')car = Car('兰博基尼','红色')
# car._name = '中华田园犬'
car.run()
car.dida()
# print(car._Car__name)
print(car.get_name())
car.set_name('玛莎拉蒂')
print(car.get_name())'''
- 使用封装,确实增加了类的定义的复杂程度,但是它也确保了数据的安全
• 1. 隐藏属性名,使调用者无法随意的修改对象中的属性
• 2. 增加了getter()和setter()方法,很好控制属性是否是只读的
• 3. 使用setter()设置属性,可以在做一个数据的验证
• 4. 使用getter()方法获取属性,使用setter()方法设置属性可以在读取属性和修改属性的同时做一些其他的处理
'''
  • 对象的属性使用 self.___xxx这种双下划线开头的属性,表示对象的隐形属性,隐形属性只提供类的内部访问,无法通过外部访问。(其实隐藏属性知识python为属性改了一个名字——》_类名__属性名 如:__name ——》_Class__name)
#封装:隐藏属性
class Car():def __init__(self,name,color):self.__name = name   #隐藏属性,不可读的属性self.color = colordef run(self):print('汽车开始跑起来了')def dida(self):print('汽车鸣笛')car = Car('兰博基尼','红色')
car.__name = '中华田园犬'
car.run()
car.dida()
print(car._Car__name)
  • 实际上隐藏属性这种方法还是会被外部访问,所以很少使用,开发中,一般使用以_name这种单下划线开头的私有属性,没有特殊情况一般不会修改私有属性。

3. 装饰器(property )

  • 使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改
# 封装:私有属性class Car():def __init__(self,name,color):self._name = name     #私有属性,一般使用这个私有属性,属于商议协定self.color = color#getter方法:提供访问这个属性的方法@property# def get_name(self):#     return self._namedef name(self):return self._name#setter方法:提供修改属性的方法@name.setter# def set_name(self,name):#     self._name = namedef name(self,name):self._name = namedef run(self):print('汽车开始跑起来了')def dida(self):print('汽车鸣笛')car = Car('兰博基尼','红色')
# car._name = '中华田园犬'     #访问属性
car.run()        #调用方法
car.dida()
# print(car._Car__name)
print(car.name)
car.name = '玛莎拉蒂'
print(car._name)

总结

本文为学习笔记,转载请标明出处,本文仅供交流学习,请勿用于非法途径,希望本文对大家有帮助。

仅是个人意见,如有不足之处或者侵权,请留言

python面向对象——类(中)相关推荐

  1. python面向对象编程中_Python面向对象编程中关于类和方法

    类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句"物以类聚". 没错就是类, 归类 物以类聚 类 ...

  2. python定义类()中写object和不写的区别

    python定义类()中写object和不写的区别 这里需要说明一下: python3中,类定义默认继承object,所以写不写没有区别 但在python2中,并不是这样 所以此内容是针对python ...

  3. Python 同一个类中不同函数相互调用

    本文采取:Python的类中函数方法相互调用的两种方式_狗哥的博客-CSDN博客 __metaclass__=type class Stu:name=Noneage=Noneschool=" ...

  4. Python 自定义类中NameError错误的解决

    Python 自定义类中NameError错误的解决 自定义类之后,python中常常有莫名其妙的NameError提示出错.经尝试后发现,在修改类代码并保存之后,光重新import类是不够的,需要重 ...

  5. python面向对象类属性_python面向对象之类属性和类方法案例分析

    本文实例讲述了python面向对象之类属性和类方法.分享给大家供大家参考,具体如下: 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 -- 实例 使用面相对象开发, ...

  6. 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结

    前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...

  7. Python面向对象---类的基本使用

    1.面向对象 类(class):是一种用来描述具有相同属性和方法的对象的集合. 类变量:类变量在整个实例化的对象中是公用的.一般定义在类中且在函数体之外. 方法:类中的函数 数据成员:类变量或者实例变 ...

  8. python面向对象类创建人物类包含姓名、职业_python面向对象类

    面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...

  9. python面向对象类的成员_Python面向对象中类的成员

    Python面向对象中类的成员总共有三种,分别是字段.方法和属性 Python Version: 3.5+ 字段 普通字段1 2 3 4 5 6 7 8class A: def __init__(se ...

  10. python面向对象类创建人物类包含姓名、职业_Python面向对象思想与应用入门教程【类与对象】...

    本文实例讲述了Python面向对象思想与应用.分享给大家供大家参考,具体如下: 面向对象思想 1.面向对象的设计思想 面向对象是基于万物皆对象这个哲学观点. 2.面向对象和面向过程的区别 面向过程 在 ...

最新文章

  1. 百度网页分享js代码
  2. Java 8 (10) CompletableFuture:组合式异步编程
  3. 决策算法python_GitHub - nxety/MachineLearning_Python: 机器学习算法python实现
  4. Python中使用PhantomJS抓取Javascript网页数据
  5. 2016.08.30~2017.07.20
  6. 《众妙之门——移动交互体验设计》—— 1.2 物物互联
  7. 信号检测与估计理论_永磁同步电机无传感器控制的新策略,提升转子位置检测精度...
  8. 华为NP课程笔记9-BGP 3
  9. python爬虫淘宝视频_python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据...
  10. 阴阳师服务器维护稍后,《阴阳师》11月7日更新维护到几点 暂时无法进入服务器进行游戏...
  11. java 循环详解_Java for循环详解
  12. 基于CIFAR100的VGG网络结构详解
  13. signal 11 linux,signal 11 (SIGSEGV)错误排查
  14. 光晕ce服务器位置,光晕ce地图
  15. 个人或企业申请专利需要什么材料专利费减的条件是什么?
  16. ipconfig使用方法完整版
  17. 小米校招把某专业大学生惹毛了!
  18. ch9121-网络配置协议
  19. CC2541 内存区域
  20. steam游戏搬砖项目,完整版免费分享

热门文章

  1. 如何写一个批量下载PDF文件的程序hp48
  2. PCL_三维点云拼接融合/点云粗配准/点云精配准
  3. 论文笔记_S2D.23_2011-ICCV_DTAM: 稠密的实时跟踪和建图
  4. python数据分析之(4)读写数据文件CSV,EXCEL等
  5. C++中vector的用法
  6. vue v-if 和 v-show 的知识点
  7. 洛谷P1120【小木棍】(搜索+剪枝)
  8. Umbraco中根据ID获取IPublishedContent
  9. 在操作系统中进程是如何通信的
  10. 【linux】centos6.9通过virtualenv安装python3.5