一文看懂Python(六)-----类与对象篇
今天给大家介绍“对象”。众所周知,Python是一门面向对象的编程语言,Python之所以如此强大,很大一部分原因也是因为Python中无处不对象,由此可知,学好Python的关键之一就是学好类与对象。好!步入正题。
一、什么是类、什么是对象
- 类的定义
一个类包括:- 1.属性,描述的是类的静态属性
- 2.方法,描述的是类的动作- 对象的定义
- 对象的定义
通过类定义的数据结构实例,因此也被称为实例对象。 - 小案例
# 定义一个学生类
class Stu:numid = 2020000078name = 'djk'gender = 1def Print(self):print('我是一个学生!')
# 实例化一个对象stu
stu = Stu()
stu.Print()
二、类如何定义
class Stu:def __init__(self,numid,name,gender,loc):self.numid = numidself.name = nameself.gender = genderself.loc = locdef Print(self):print(self.numid,self.name,self.gender,self.loc)
# 实例化
stu = Stu(1,'djk',1,'shandong')
# 调用Print()函数
stu.Print()
至于这里为什么有个self,可以看我另一篇文章,里面讲解的非常清楚,这里就不详细介绍了,而且还通过与Java语言做对比来理解self。深入理解Python中的self参数和__init__(self)方法–通过类比Java语言
三、面向对象的三大特征
3.1 封装
对象就是一个封装,将属于对象的属性和方法封装成一个类,只允许对象自己在内部访问!
3.2 继承
- 继承是子类自动共享父类之间数据和方法的机制
- 案例
class Parent:def Hello(self):print('正在调用父类的方法')
class Child(Parent):pass
p = Parent()
p.Hello()
c = Child()
c.Hello()
- 如果子类中定义与父类同名的方法和属性,则会自动覆盖父类对应的属性和方法
- 案例
class Parent:def Hello(self):print('正在调用父类的方法')
class Child(Parent):def Hello(self):print('正在调用子类的方法')
p = Parent()
p.Hello()
c = Child()
c.Hello()
3.3 多态
- 什么是多态呢?
多态就是方法名一样,但是方法的实现方式不一样 - 案例
# 多态案例
class A():def fun(self):print('我是小A')
class B():def fun(self):print('我是小B')
a = A()
a.fun()
b = B()
b.fun()
四、什么是公有、什么是私有
类Class中成员变量有两种属性分别是:实例属性和类属性。
实例属性是在构造函数中定义的(__init__),定义时候以self作为前缀。
类属性是在类中方法之外但又在类之中定义的属性。类属性在所有实例之间共享。在类内部和类外部都可以通过"类.类属性"来访问。
两者访问形式:主程序中,实例属性只能通过对象名访问;而类属性能够通过类名访问,也可以通过对象名访问。
对于公有成员(方法和变量),可以公开使用,既可以在类内部访问,也可以在类外部访问。
对于私有成员(方法和变量),只能在类内部使用,但也可以通过特殊的方法进行访问,即"对象名._类名+私有成员",book._Book__types。
- 两者表现形式:类属性定义时,如果以两个短下滑线"__"开头则表示是私有属性,否则就是公有属性。例如,self.size = s为私有属性,而self.price = money为公有属性。
私有方法:以两个下滑线""开始,不能通过对象名直接调用。只能在属于对象的方法中通过self调用。例如,self._namemethod
- 两者表现形式:类属性定义时,如果以两个短下滑线"__"开头则表示是私有属性,否则就是公有属性。例如,self.size = s为私有属性,而self.price = money为公有属性。
公有方法:通过对象名直接调用。例如,a.printLcs
静态方法:可以通过类名和对象名调用,但不能直接访问属于对象的成员,只能访问属于类的成员。
五、一些相关的BIF
方法名 | 方法介绍 |
---|---|
issubclass(class,classinfo) | 如果class是classinfo的一个子类,返回True |
isinstance(object,classinfo) | 检查一个实例对象object是否是属于classinfo类的 |
hasattr(object,name) | 测试一个对象object是否有指定的属性name |
getattr(object,name[,default]) | 返回对象指定的属性值,如果属性不存在的话,,如果设置了default,则将default打印出来;否则会抛出一个AttributeError的异常 |
setattr(object,name,value) | 设置对象中指定属性的值,如果指定属性不存在,会新建一个属性并赋值 |
delattr(object,name) | 删除对象中指定属性;如果指定属性已经不存在,则会抛出一个AttributeError的异常 |
property(fget = None,fset = None,fdel = None,fdoc = None) | 以自己定义好的属性去设置属性 |
六、类、类对象与实例对象的关系
class C:count = 0
a = C()
b = C()
c = C()
print('a修改之前:{}'.format(a.count))
print('b修改之前:{}'.format(b.count))
print('c修改之前:{}'.format(c.count))
c.count += 10 # 修改的是实例对象c
print('c修改实例对象之后:{}'.format(c.count))
# 我们修改类对象
C.count += 100
print('a修改之后:{}'.format(a.count))
print('a修改之后:{}'.format(b.count))
print('c修改类对象之后:{}'.format(c.count))
# 为什么会这样呢?因为实例属性将类属性给覆盖了,我们只能看到实例属性,不能看到类属性
一文看懂Python(六)-----类与对象篇相关推荐
- 一文看懂Python(五)-----文件篇
一.前言 文件操作在所有编程语言中都扮演着一个非常重要的角色,编程语言中的文件操作都大同小异,无非就是读取和写入,本文会详细介绍Python的相关文件操作,包括常用的方法.方法如何使用.一些小的案例以 ...
- 一文看懂Python(二)-----字符串篇
本文着重介绍Python字符串的相关方法,有很多特别使用的方法,但也有比较奇特的方法,可能想都想不到,哈哈哈!比较难理解的方法我会把运行结果贴上去,简单的就不贴了,最后祝大家学的愉快! 1.创建一个字 ...
- 一文看懂Python(三)-----字典篇
字典不同于列表.元组和字符串,列表.元组和字符串可以概括为序列类型,有以下特点: 1.都可以通过索引得到每一个元素 2.默认索引值总是从0开始 3.可以通过切片的方法得到一个范围内的元素集合 4.有很 ...
- 一文看懂Python collections模块的高效数据类型
原作: George Seif, 发表于medium.com, 大江狗原创翻译, 并对原文稍作修改. Python的最大优势之一是其广泛的模块和软件包.这将Python的功能扩展到许多受欢迎的领域,包 ...
- angular 字符串转换成数字_一文看懂Python列表、元组和字符串操作
好文推荐,转自CSDN,原作星辰StarDust,感觉写的比自己清晰-大江狗荐语. 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力 ...
- 一文看懂Python 爬虫 进阶(三)
一文看懂Python 爬虫 进阶(三) 文章目录 一文看懂Python 爬虫 进阶(三) **猫眼电影(xpath)** **链家二手房案例(xpath)** **百度贴吧图片抓取** 这篇几乎都是代 ...
- python运行程序-一文看懂python程序的执行过程
本文主要介绍的是python程序的执行过程,首先介绍的是编译过程,其次介绍的是过程图解及编译字节码,最后介绍了codeobject对象的属性,具体的跟随小编一起来了解一下. 一.编译过程概述 当我们执 ...
- 一文看懂Python多进程与多线程编程(工作学习面试必读)
进程(process)和线程(thread)是非常抽象的概念, 也是程序员必需掌握的核心知识.多进程和多线程编程对于代码的并发执行,提升代码效率和缩短运行时间至关重要.小编我今天就来尝试下用一文总结下 ...
- python类的构造方法名称_搞懂Python的类和对象名称空间
代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间:文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层函 ...
最新文章
- Linux基础知识——常用shell命令介绍(三)
- 使用苹果版博客编辑器发布的文章
- Scala入门到精通——第十八节 隐式转换与隐式参数(一)
- [Elixir008]Nested Module里的动态函数调用方式
- 【DP】奖励卡(jzoj 3937)
- jsp+mysql学生成绩管理系统_jsp+servlet+mysql学生成绩管理系统 javaweb成绩管理系统 - 下载 - 搜珍网...
- java封装264成flv,将H.264封装为FLV格式-Go语言中文社区
- qqxml图片代码_PCQQ - 发送自定义的XML卡片消息
- HaaS506-HD1本地更新固件教程
- excel 导出PDF ExportAsFixedFormat函数 报错-2147024809 (0x80070057)
- iphone11返回上一级手势怎么设置_iPhone 11 系列手势操作大全你了解吗?
- 全球及中国焦磷酸钠行业需求态势及发展趋势预测报告(2022-2027年)
- 快手上用计算机打歌的名儿叫什么意思,快手起什么名字容易火?快手网名怎么起独特...
- studio 3t 如何链接开启验证的mongodb
- python基础学习(三)之线性数据结构
- js中 ‘ ‘==0 为什么等于true?
- centos8更换国内源(阿里源)
- VC++ Opensll RSA分段加密
- 【一窥道德经】第三章
- 联想m100显示耗材_联想领像M100系列打印机加粉及清零方法
热门文章
- SQL Server事务回滚对自增键的影响
- 【LuoguP33294123】[ZJOI2011]最小割[CQOI2016]不同的最小割
- mapReducer第一个例子WordCount
- Linux - 磁盘操作
- 关于未能找到源文件“.NETFramework,Version=v4.0.AssemblyAttributes.cs”问题
- Asp.Net Mvc之模型注解
- WCF系列学习笔记4之绑定详解
- SDN学习之旅-RYU笔记(2)
- 编程方法学21:监听器和迭代器回顾
- typedef的用法