python面向对象

  • 一、面向对象
  • 1、python面向对象与其他语言区别
  • 2、面向对象与面向过程
  • 3、总结
  • 二、类与对象的属性
  • 1、对象的属性
  • 对象属性的操作
  • 2、类属性
  • 3、属性的本质
  • 4、限定类的可添加哪些属性
  • 六、方法
  • 1、概念




本人本来是写java的程序员,现在搞python自动化,有时候就感觉python好随意,很多地方都是凭感觉,虽然能实现工作中的大部分功能,但是一知半解,所以决心系统的学习一下python。这里面向对象是在B站上看一位up主的视频,他讲的真的非常好,我仅记录部分内容,截图很多[来自他的视频],(https://space.bilibili.com/28688276),加个传送门,以示尊重~

核心内容:
类就是生产月饼的模具,如果模具上有一个明字,那么可以在用这个模子做出来的月饼上找到明字,如果你在月饼上找当然可以找到这个明。你又在月饼另一面加了团圆二字,在模具上当然是不会有这两个字的。这里的明就是类属性,团圆是对象属性,也叫实例属性

一、面向对象

1、python面向对象与其他语言区别

概念我就不阐述了,python是一个非常彻底的面向对象OOP的语言。看下图就恍然大悟了~

Python 为什么有些对象没有 __dict__ 属性_面向对象

2、面向对象与面向过程

二者都是解决问题的一种方式,思想

Python 为什么有些对象没有 __dict__ 属性_python_02

红框里的都是对象,面向对象可以说只关注对象就可以了,各自做各自的事情就可以了。面向对象像是个包工头,负责瞎指挥就行了。面向过程是你自己打工,什么都要自己做,难受~

Python 为什么有些对象没有 __dict__ 属性_面向对象_03

3、总结

面向对象其实是对面向过程的总结。所以面向对象最重要的就是要完成某个功能,需要哪些对象去处理

Python 为什么有些对象没有 __dict__ 属性_后端_04

二、类与对象的属性

对象抽象出类,类可以实例化出对象。这里我比较熟就不记了,哈哈哈,如何在python中定义类?如下是最简单的类的创建了,如果在java里,定义一个对象是Person zhangsan=new Person()语法上的确麻烦很多。记住万物皆对象,这个Person类其实在创建的时候就会在内存中开辟一块空间,专门放这个类,且类的名字是Person,如果Person=666是可以的,这个时候只是吧Person的引用指向了另外一个地方,因为Person类的本质其实也是个对象。这里可能就有点绕了,DDDD

Python 为什么有些对象没有 __dict__ 属性_面向过程_05


根据类产生的对象怎么知道是这个Person类而不是Dog类呢,比如怎么知道你是人而不是狗,对象有一个__class__的属性,可以指向了类的。就像人的DNA差不多啊个人感觉

Python 为什么有些对象没有 __dict__ 属性_面向过程_06

1、对象的属性

对象属性的操作

python里面可以直接给对象增加属性,还能删除对象的属性,就很离谱,我真的哭笑不得

Python 为什么有些对象没有 __dict__ 属性_面向对象_07


居然可以修改已经生成的对象的类,简直太离谱啊…我一个Java转过来的真的震惊了,甚至让我感觉python里面怎么到处都是指针,笑哭了

Python 为什么有些对象没有 __dict__ 属性_面向过程_08

2、类属性

知道了对象的属性操作,又因为万物皆对象,所以类也是对象。这么理解吧,类呢就像是做月饼的模具,一个个具体的月饼就是对象。那模具本身也是一个对象,也需要被做出来才能做月饼,这样就不难理解了吧,类的本质也是对象,所以类的属性操作和对象那是一样一样滴

Python 为什么有些对象没有 __dict__ 属性_面向过程_09

3、属性的本质

从上面的试验可以卡出,不管是类属性,还是对象的属性。都可以通过__dict__这么一个字典打印出来。如果定义一个对象,是否可以直接修改这个字典,然后进行对象属性的操作呢

Python 为什么有些对象没有 __dict__ 属性_后端_10

4、限定类的可添加哪些属性

一个对象可以任意添加属性,那就会造成麻烦。一个类就是模子,用来规范对象的,如果同一个模子的对象这么不同,就很难管理。所以需要限制住类产生的对象

Python 为什么有些对象没有 __dict__ 属性_开发语言_11

六、方法

1、概念

描述一个目标的行为动作,这里的目标指的就是类或者对象

Python 为什么有些对象没有 __dict__ 属性_面向对象_12


代码:

Python 为什么有些对象没有 __dict__ 属性_面向过程_13