点此查看 零基础Python全栈文章目录及源码下载

本文目录

  • 1. 简介
  • 2. Python类的定义
  • 3. Python类的动态语言特性
  • 4. Python类中属性的访问控制

1. 简介

Python支持面向对象编程,所以Python可以很容易地用面向对象的观点来组织代码,实现业务逻辑处理。

Python是一种动态语言,所以它的面向对象机制的定义和使用都挺有意思,所以本篇主要内容:

  • Python类的定义
  • Python类的动态语言特性
  • Python类中属性的访问控制

2. Python类的定义

举个栗子先:

class Car:#类名Carmadein="中国"#类属性def setCarInfo(self):#类方法self.name="解放牌汽车";#类的实例属性print(Car.madein)#通过类名直接访问类属性,输出:中国
car=Car()#初始化
print(car.madein)#通过对象访问类属性,输出:中国car.setCarInfo()#调用方法
print(car.name)##访问实例属性,输出解放牌汽车

具体解释下:

  1. 类定义关键字为class
  2. 类方法定义与普通方法定义的区别是第一个参数必须是self,self代表的是类的实例化对象
  3. 类的属性分为两种,类属性和实例化属性,类属性是类所有对象共有的一个属性,可以通过类或者对象访问。而实例属性每个对象都拥有一个。
  4. 实例属性需要借助方法来实现,在方法中有self.XXX=123。则表示定义了实例属性XXX。

3. Python类的动态语言特性

好的,到目前为止一切正常,但是看下面一个例子:

class Car:#类名Carmadein="中国"#类属性def setCarInfo(self):#类方法self.name="解放牌汽车";#类的实例属性
car=Car()
print(car.name)#报错信息:AttributeError: 'Car' object has no attribute 'name'

明明已经定义了类Car的实例属性self.name,但是为什么报错Car没有属性name呢。

这就要从Python语言的动态特性理解,Python语言不是预编译型的,也就是说Python自己都不知道类有什么属性,必须运行过了才知道!

如果先调用car.setCarInfo(),在执行self.name="解放牌汽车"时,此时类才有了实例对象self。所以要想给类定义实例属性,最好是在构造函数中定义,这样就能保证类一旦实例化出对象,该对象就具备了构造函数中的实例属性。如下代码中,因为在执行car=Car()时,调用了构造方法,所以执行了self.name=“解放牌汽车”,所以car.name这一实例属性已存在且被赋值。

class Car:#类名Carmadein="中国"#类属性def __init__(self):#构造方法self.name="解放牌汽车";#类的实例属性
car=Car()
print(car.name)#输出解放牌汽车

OK,到这还没完,Python是动态语言嘛,所以其实可以玩的很开,例如:

#类定义
class Car:#定义了类madein="中国"#定义了一个类的属性
#实例化
car1=Car()#实例化了一个对象print(car1.madein)#输出中国
car1.madein="非洲"#注意这是定义了一个实例属性,而类属性也是存在的
print(car1.madein)#输出非洲,因为先访问实例属性
print(Car.madein)#输出中国,类属性依然存在

4. Python类中属性的访问控制

Python也支持类的私有变量,也就是说类里面能访问的,类外面不允许访问。举个例子如下,在类属性名称前面添加__(两个下划线),该属性就成为私有变量,无法直接访问,但是可以通过类方法去访问(或设置)该私有变量的值。

class Car:#类def __init__(self):self.name="大众"#名字公开self.__price="10万"#价格保密def getPrice(self):return self.__price;
car=Car()#实例化了一个对象
print(car.getPrice())#输出10万
print(car.__price)#报错:AttributeError: 'Car' object has no attribute '__price'

从本篇来看,Python动态语言的本质暴露的十分明显啊。

Python学习笔记(13)-Python类与对象示例相关推荐

  1. python学习笔记:python类和对象,文件操作,网络编程

    目录 一.python面向对象 1.类和对象的定义 2.单继承 3.多继承 4.成员属性 5.异常 6.@property 二.python文件操作 文件的打开和读写 文件对象接口汇总 三.pytho ...

  2. Python学习笔记《Python核心编程》第4章Python对象

    所有的python对象都拥有三个特性:身份,类型和值 身份:每个对象都有一个唯一的身份标识自己,可以使用内建函数id()来得到,这个值被认为是该对象的内存地址:--只读 类型:对象的类型决定了该对象可 ...

  3. python学习笔记之——装饰器及对象

    1.反射之__import__ 我们知道import语句是用来导入外部模块的,当然还有from...import...也可以,但是其实import实际上是使用builtin函数__import__来工 ...

  4. python基础论文_北大博士Python学习笔记,Python基础语法总结,一篇文章带你入门...

    image.png 网上现在Python学习资料有很多,但是很杂.很多初学Python的朋友就不知道该怎么去抉择,那些是自己当下所需要的. 刚好朋友是北大的博士,在IT行业也工作八年了.就把他学习Py ...

  5. 『Python学习笔记』Python中的异步Web框架之fastAPI介绍RestAPI

    Python中的异步Web框架之fastAPI介绍&RestAPI 文章目录 一. fastAPI简要介绍 1.1. 安装 1.2. 创建 1.3. get方法 1.4. post方法 1.5 ...

  6. 『Python学习笔记』Python实现并发编程(补充joblibpymysql)

    Python实现并发编程(补充joblib&pymysql) 文章目录 一. 并发编程知识点 1.1. 为什么引入并发编程 1.2. 如何选择多线程多进程多协程 1.2.1. 什么是CPU密集 ...

  7. Python学习笔记(一) Python基础

    文章目录 1. 初始Python 1.1 Python安装 1.2 Python解释器 1.3 安装和配置PyCharm工具 2. 基础语法 2.1 注释 2.2 字面量 2.3 变量 2.4 标识符 ...

  8. Python学习笔记: Python 标准库概览二

    本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python 简介 Python流程介绍:深入Python 流程 Python数据结构 ...

  9. python语言有哪两个系列_(转)Python学习笔记系列——Python是一种纯粹的语言

    在摸索适合自己的语言学习方法,看到一篇好文章,转之,侵删. Python的语法范式相当多.知识点相当细,但是Python是一种内在一致性很好的语言,理解了几条基本的规则,就很容易理解大部分语法与现象. ...

最新文章

  1. matlab 斐波那契数列Fibonacci Sequence
  2. Ubuntu下安装Node.js
  3. docker-machine为节点安装指定版本的docker-ce的思路
  4. python 制作高斯mask_Python3 练手项目: 抓取豆瓣陈情令评论,并制作词云图
  5. IE Firefox css 差别 [转]
  6. leetcode 1486. 数组异或操作(位运算)
  7. k8s核心技术-Pod(镜像的拉取_重启策略_资源限制)_---K8S_Google工作笔记0022
  8. mysql er图 linux_ER图设计
  9. 二分查找递归解法(java)
  10. MySql数据库快速入门与常用sql语句
  11. 计算机会议论文和sci,ei会议论文集算不算期刊_ieee会议论文集属于istp_会议论文集算发表么...
  12. XPI 文件安装方法
  13. XCVU9P收发卡设计资料原理图第612篇:基于XCVU9P的32路光纤PCIeX16收发卡
  14. 机器学习-朴素贝叶斯(高斯、多项式、伯努利)
  15. AD软件绘制stm32最小系统电路原理图与PCB图
  16. 简体中文旗舰版Windows7SP1
  17. 打印服务器通常不采用tcp ip协议,TCP/IP 卷Ⅰ协议-绪论
  18. Linux桌面系统x11原理简介
  19. Duplicate Pair
  20. 《卷积网络》深度卷积网络实例

热门文章

  1. 三国麻将攻城的java_Java 攻城狮学习线路图
  2. 7-16 验证“哥德巴赫猜想” (20 分)
  3. java语言实现诗词竖版排列及给诗词加边框
  4. 实用盘点:10款高效办公软件,月薪2K变2W
  5. (1-4)sklearn库的----模型评估
  6. 《国际学术论文写作与发表》参考答案
  7. linux内存水印,Linux批量打水印
  8. struts2 checkboxlist标签的使用
  9. Linux Kernel - Debug Guide (Linux内核调试指南 )
  10. java写的酷炫项目_基于RxJava实现酷炫启动页