今天给大家介绍“对象”。众所周知,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
  • 公有方法:通过对象名直接调用。例如,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(六)-----类与对象篇相关推荐

  1. 一文看懂Python(五)-----文件篇

    一.前言 文件操作在所有编程语言中都扮演着一个非常重要的角色,编程语言中的文件操作都大同小异,无非就是读取和写入,本文会详细介绍Python的相关文件操作,包括常用的方法.方法如何使用.一些小的案例以 ...

  2. 一文看懂Python(二)-----字符串篇

    本文着重介绍Python字符串的相关方法,有很多特别使用的方法,但也有比较奇特的方法,可能想都想不到,哈哈哈!比较难理解的方法我会把运行结果贴上去,简单的就不贴了,最后祝大家学的愉快! 1.创建一个字 ...

  3. 一文看懂Python(三)-----字典篇

    字典不同于列表.元组和字符串,列表.元组和字符串可以概括为序列类型,有以下特点: 1.都可以通过索引得到每一个元素 2.默认索引值总是从0开始 3.可以通过切片的方法得到一个范围内的元素集合 4.有很 ...

  4. 一文看懂Python collections模块的高效数据类型

    原作: George Seif, 发表于medium.com, 大江狗原创翻译, 并对原文稍作修改. Python的最大优势之一是其广泛的模块和软件包.这将Python的功能扩展到许多受欢迎的领域,包 ...

  5. angular 字符串转换成数字_一文看懂Python列表、元组和字符串操作

    好文推荐,转自CSDN,原作星辰StarDust,感觉写的比自己清晰-大江狗荐语. 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力 ...

  6. 一文看懂Python 爬虫 进阶(三)

    一文看懂Python 爬虫 进阶(三) 文章目录 一文看懂Python 爬虫 进阶(三) **猫眼电影(xpath)** **链家二手房案例(xpath)** **百度贴吧图片抓取** 这篇几乎都是代 ...

  7. python运行程序-一文看懂python程序的执行过程

    本文主要介绍的是python程序的执行过程,首先介绍的是编译过程,其次介绍的是过程图解及编译字节码,最后介绍了codeobject对象的属性,具体的跟随小编一起来了解一下. 一.编译过程概述 当我们执 ...

  8. 一文看懂Python多进程与多线程编程(工作学习面试必读)

    进程(process)和线程(thread)是非常抽象的概念, 也是程序员必需掌握的核心知识.多进程和多线程编程对于代码的并发执行,提升代码效率和缩短运行时间至关重要.小编我今天就来尝试下用一文总结下 ...

  9. python类的构造方法名称_搞懂Python的类和对象名称空间

    代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间:文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层函 ...

最新文章

  1. Linux基础知识——常用shell命令介绍(三)
  2. 使用苹果版博客编辑器发布的文章
  3. Scala入门到精通——第十八节 隐式转换与隐式参数(一)
  4. [Elixir008]Nested Module里的动态函数调用方式
  5. 【DP】奖励卡(jzoj 3937)
  6. jsp+mysql学生成绩管理系统_jsp+servlet+mysql学生成绩管理系统 javaweb成绩管理系统 - 下载 - 搜珍网...
  7. java封装264成flv,将H.264封装为FLV格式-Go语言中文社区
  8. qqxml图片代码_PCQQ - 发送自定义的XML卡片消息
  9. HaaS506-HD1本地更新固件教程
  10. excel 导出PDF ExportAsFixedFormat函数 报错-2147024809 (0x80070057)
  11. iphone11返回上一级手势怎么设置_iPhone 11 系列手势操作大全你了解吗?
  12. 全球及中国焦磷酸钠行业需求态势及发展趋势预测报告(2022-2027年)
  13. 快手上用计算机打歌的名儿叫什么意思,快手起什么名字容易火?快手网名怎么起独特...
  14. studio 3t 如何链接开启验证的mongodb
  15. python基础学习(三)之线性数据结构
  16. js中 ‘ ‘==0 为什么等于true?
  17. centos8更换国内源(阿里源)
  18. VC++ Opensll RSA分段加密
  19. 【一窥道德经】第三章
  20. 联想m100显示耗材_联想领像M100系列打印机加粉及清零方法

热门文章

  1. SQL Server事务回滚对自增键的影响
  2. 【LuoguP33294123】[ZJOI2011]最小割[CQOI2016]不同的最小割
  3. mapReducer第一个例子WordCount
  4. Linux - 磁盘操作
  5. 关于未能找到源文件“.NETFramework,Version=v4.0.AssemblyAttributes.cs”问题
  6. Asp.Net Mvc之模型注解
  7. WCF系列学习笔记4之绑定详解
  8. SDN学习之旅-RYU笔记(2)
  9. 编程方法学21:监听器和迭代器回顾
  10. typedef的用法