Python--面向对象编程进阶
在我的粗浅理解中,简而言之,面向对象编程实际上就是用类这个特殊的东西将很多函数包含在其中,我们可以通过这些函数得到这个类的各种属性。对象实际上是类的具体体现,类则是抽象的。
例如:我们定义一个student类,student的属性包括name、age、course。我们可以在主函数中用这个类创造一个实例来进行各种操作。下面我们将以这个实例来对面对对象编程进行讲解
类的定义
" __ init __"函数可以看做是对类的属性的初始化,我们在这个函数中可以对各种属性进行复制。下面的各种函数则是对类的属性的各种操作。
class student():def __init__(self,name,age,course):self.name=nameself.age=ageself.course=coursedef study(self):print('%s的专业是%s'%(self.name,self.course))def movie(self):if self.age>18:print('%s正在看岛国爱情片'%self.name)else:print('小孩子还是看熊出没吧')
那么在定义完类之后我们如何对类进行调用操作呢。
def main():stu1=student('张伟',19,'Python')stu1.study()stu1.movie()
if __name__=='__main__':main()
访问可见性问题
在c++的学习中,类的属性有三种类型:public(公开)、private(私有)、protected(受保护的)。那么Python中的类是否也有多种类型呢。
Python中对象的属性只有两种类型:公开和私有。如何设定为私有,其实很简单,就是在对属性命名时用两个下划线作为开头,那么在主函数中这个属性就是无法被访问的了,也即是私有类型。
class student():def __init__(self,name,age,course):self.__name=nameself.__age=ageself.__course=coursedef __study(self):print('%s的专业是%s'%(self.__name,self.__course))def __movie(self):if self.__age>18:print('%s正在看岛国爱情片'%self.__name)else:print('小孩子还是看熊出没吧')
但是只要你知道改名的规则,那我们便可以无视私有规则,仍可以对对象中的属性进行访问,因为Python对公开和私有类型并没有明确的界限,而只是增加两个下划线来进行干扰。如下,便可以正常进行访问。
def main():stu1=student('张伟',19,'Python')stu1._student__study()stu1._student__movie()
if __name__=='__main__':main()
进阶
@property装饰器
- 原本的解释有点难以理解,笔者个人理解@property装饰器为:它是一种可以合理处理对象属性访问可见性问题的工具,它可以在不直接访问对象的属性的前提下使外界可以直接访问对象的私有属性。正如其名,它是对类中函数的一个装饰,只起到装饰作用,对函数原本功能没有丝毫的影响。总而言之就是:只要我们用了这个装饰器,我们在主函数中就可以直接访问对象的私有属性而不对其产生任何影响。
- 装饰器包含两种方法:getter方法和setter方法。顾名思义,getter方法就是对属性的获取,将私有的属性获取过来以供我们使用;setter方法则是对属性进行更改。
FBI WARNING:注意两种方法的函数定义,以及函数上面@的东西
class student():def __init__(self,name,age,course):self.__name=nameself.__age=ageself.__course=course#访问器--getter方法@propertydef name(self):return self.__name@propertydef age(self):return self.__age@propertydef course(self):return self.__course#访问器--setter方法@name.setterdef name(self,name):self.__name=name@age.setterdef age(self,age):self.__age=agedef study(self):print('%s的专业是%s'%(self.__name,self.__course))def movie(self):if self.__age>18:print('%s正在看岛国爱情片'%self.__name)else:print('小孩子还是看熊出没吧')
def main():stu1=student('张伟',19,'Python')stu1.study()stu1.movie()
if __name__=='__main__':main()
_ slots _魔法
在创建类的时候,我们可以再类中绑定各种属性,但是也可以给对象绑定各种属性(说人话就是我们可以再创建类的时候直接就初始化一些属性,也可以在主函数中创建完对象以后再造一些新的属性)
例如下面我们就在主函数中心绑定了一个qq属性,这个是完全可以实现的。
def main():stu1=student('张伟',19,'Python')stu1.study()stu1.movie()stu1.qq=2570807379print(stu1.qq)
但是有时候为了不让给对象绑定新属性,或者只让绑定固定的几种属性,我们需要用到_ slots _。
class Person(object):# 限定Person对象只能绑定_name, _age和_gender属性__slots__ = ('_name', '_age', '_gender')def __init__(self, name, age):self._name = nameself._age = age@propertydef name(self):return self._name@propertydef age(self):return self._age@age.setterdef age(self, age):self._age = agedef play(self):if self._age <= 16:print('%s正在玩飞行棋.' % self._name)else:print('%s正在玩斗地主.' % self._name)def main():person = Person('王大锤', 22)person.play()person._gender = '男'
未完待续,且听下回分解
Python--面向对象编程进阶相关推荐
- Python 面向对象编程(进阶部分)
静态方法: 通过 @staticmethod 装饰器即可把其装饰的方法变为一个静态方法.普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实 ...
- Python开发系列课程(11) - 面向对象编程进阶
面向对象编程进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息.为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象 ...
- Python面向对象编程:类继承和其衍生术语
Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...
- 【Python基础】Python 面向对象编程(上篇)
我的施工计划图 已完成专题包括: 1我的施工计划 2数字专题 3字符串专题 4列表专题 5流程控制专题 6编程风格专题 7函数使用专题 今天是面向对象编程的上篇:基础专题 Python 面向对象编程 ...
- Python零基础速成班-第10讲-Python面向对象编程(下),Property属性、特殊方法、设计模式、链表应用
Python零基础速成班-第10讲-Python面向对象编程(下),Property属性.特殊方法.设计模式.链表应用 学习目标 面向对象编程 接上一讲:Property属性.特殊方法.设计模式 面向 ...
- 视频教程-彻底掌握Python面向对象编程-Python
彻底掌握Python面向对象编程 曾就职于猎豹移动,从业已有8年,资深技术专家,现致力于线上教育 陈政强 ¥39.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP ...
- 这可能是Python面向对象编程的最佳实践
作者 | 崔庆才 来源 | 进击的Coder(ID:FightingCoder) Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了 ...
- 《Python面向对象编程指南》——1.2 基类中的__init__()方法
本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...
- 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结
前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...
- python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!
原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...
最新文章
- 11-Qt6 QByteArray字节数组类
- 2021年下信息系统项目管理师真题各章节占分比
- 走钢索的人---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十七)...
- 简析Visual C++中的活动数据对象
- 毕业论文word排版设置
- aria2c下载迅雷离线
- python scrapy框架详解_Python爬虫知识点四--scrapy框架
- 数据库中系统数据库服务器,sql中什么是系统数据库服务器
- pip install -q git+https://github.com/tensorflow/docs.git报错
- linux内核中创建线程方法
- 微信小程序 +第三方 直播-IM在线聊天
- xp共享文件夹服务器,xp共享文件夹服务器
- 聚类分析入门(理论)
- 第6章 面向对象基本特征
- Windowed functions can only appear in the SELECT or ORDER BY clauses
- vue实现点击不同按钮展示不同内容
- 《自学是门手艺活》读后感
- 基于Vue 全家桶实现网易云音乐 WebApp
- Java编程思想读书笔记——多态
- 汇编语言题库总结及题目分析