2019/11/07 03-实例变量和类变量及实例属性访问顺序

面向对象是分析世界了解世界的方法论,可以帮助构建项目在这里插入图片描述在这里插入图片描述
是一种方法论
类是万事万物的抽象概念
类里面可以抽象出属性和方法
每一次具象就是一个实例,每一次实例化得到的都是不同的实例

在这里插入图片描述在这里插入图片描述
继承为了复用,有单继承和多继承在这里插入图片描述
类要求使用大驼峰,首字母大写
类定义好,就产生一个类对象,绑定到了标识符上面

在这里插入图片描述在这里插入图片描述
**类里面定义的所有标识符称为类的变量,方法是属于类的,定义在类范围的,叫类属性
**
在这里插入图片描述
方法并不是普通的函数,之前的inspect模块的时候,有一大堆判断,isfunction,ismethod(定义到类里面一般叫方法)本质上也是函数,但是方法是定义在类中的
定义方法的时候,习惯第一参数是self,最好不要修改,是工人的,self指代当前实例本身

在这里插入图片描述
实例由类产生,,实例化得到一个类的实例
在这里插入图片描述
进行初始化就可以使用了
类实例化得到实体,进行初始化,初始化函数进行初始的属性赋值

在这里插入图片描述
init本身在你实例化的时候使用,类名()这就是时候实例化,就需要调用init,调用init函数会 把实例本身传到self中去,就可以使用了在这里插入图片描述
这些方法本质上是从类定义的在这里插入图片描述
init还有一点问题,init函数就应该return none,init函数要求必须return none
在这里插入图片描述
init函数要求必须return none,不用返回任何值在这里插入图片描述
这里面是可以调用其他函数的,除了retuen,其他想怎么做怎么做在这里插入图片描述在这里插入图片描述
拿到这个值+20再写给它
在这里插入图片描述在这里插入图片描述
self.age age是实例的属性
在这里插入图片描述
类实例化后,一定会获得一个对象
init方法之后,self肯定指代某一个实例,
实例对象会绑定方法(tom实例化,会让tom和这个方法产生关联)
实例对象和方法做了绑定,jerry.age的时候会将jerry作为self传入
在这里插入图片描述
showage虽然建立再类上的,但是每一个实例都会跟这样的方法,建立一个绑定,下回用实例调用这个方法,会将实例作为第一参数self传入在这里插入图片描述在这里插入图片描述
每一次实例化后得到一个对象,内部的self就是当前的对象,是同一个东西
在这里插入图片描述
先打印这句,后打印下面的,因为先定义类,后计算等号右边的,调用myclass在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
类的属性赋值30,这是都在使用类的定义,全人类都是你的在这里插入图片描述
name就修改了,就改自己的个体,对别的个体就没有影响,每一个个体之前实际上是相互独立的
在这里插入图片描述
方法是定义在类上的,凡是看到self.xxx就是实例上的属性,跟每一个实体相关在这里插入图片描述
全人类都是你的,但是你的不是全人类的在这里插入图片描述
name指对象名
class指对象的类型
dict指对象的属性的字典
qualname 类的限定名
在这里插入图片描述
类是有类名,但是实体没有实体名在这里插入图片描述
tom的类是谁,这个类有没有名字在这里插入图片描述
tom是个对象
type取class和tom的class是谁是一样的
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
6和7的区别,name名字是典型的字符串类型,
在返回的字符串类型套一个type,就是返回的class
在这里插入图片描述
dict非常重要,整个python面向对象核心就是字典
大多数对象,除了几个内建的,其他所有都可以通过字典观察内部的变化,很重要,只有这样才知道面向对象是什么样子(其他语言就看不到面向对象里面的构造方式)
在这里插入图片描述在这里插入图片描述在这里插入图片描述
实例调用split,实例会作为第一参数送给self,
在这里插入图片描述
凡是看到self默认用实例来调用
在这里插入图片描述在这里插入图片描述
窥探一下里面的字典
一个类的类型是type
str也是类型,类型的类型是type

在这里插入图片描述
字典是个二元组,就可以用items
这些都是类的

在这里插入图片描述在这里插入图片描述
类似之前写的这种
在这里插入图片描述
凡是类的属性都在类的字典当中在这里插入图片描述在这里插入图片描述
**查看tom的实例
打印类,是main模块当中的person类,
tom实例的字典,只有一个kv对(self.name=name)实例的属性是放在自己的字典当中
**

在这里插入图片描述
名字一般返回的肯定是字符串,对于类的属性是放在类的字典中,实例的属性放在实例的字典中(self相关的就是实例)
谁等于谁就是kv

在这里插入图片描述
看一下jerry的dict是什么

在这里插入图片描述
类调用dict
类有类字典,实例有实例字典,每一个独特的实例,实际上就是自己的,跟别的不想关

在这里插入图片描述
如果从实例访问类的属性,就需要借助class找到所属的类
在这里插入图片描述
现在可以用实例访问一个类属性,说明跨界了,这样就解释了类是大家的
在这里插入图片描述
从类是不能访问实例的属性的,相当于是一对多
在这里插入图片描述在这里插入图片描述
实例的属性保存在实例中,类的属性保存在类字典中,如果从实例访问类的属性,就需要借助__class__来找到所属的类
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
类字典里有,age,height,init
没有实例就没有实例字典

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
这个是类字典改变,访问实例的时候,实例依然优先找的是自己的字典
tom是18,jerry是20
在这里插入图片描述
赋值即定义属性,这样会导致实例的字典中会加上相应的kv对
tom没有height就去类里面找

在这里插入图片描述
**tom.height+=10 等于tom.height=tom.height+10,右边用的类的,左边相当于赋值即定义
右边赋值,赋值即定义,重新创建出来
**在这里插入图片描述
下面修改的是类的字典的
在这里插入图片描述在这里插入图片描述
tom也可以有weight
但是tom的字典李梅weight,因为不在一个线程里,所以提前报了

在这里插入图片描述
类的就是大家的,其实例都可以访问到属性,实例的,就是实例自己的,类变量是属于类的变量,类的所有实例可以共享这个变量。
每一个对象可以动态给自己增加一个属性
在这里插入图片描述
等价是等价,但是还是有所不同的
在这里插入图片描述在这里插入图片描述
实例属性的查找顺序对后面的有影响,前面的没有影响
实例访问一个属性优先用自己字典中的属性,如果自己的属性中没有找到这个属性,并不会放弃,会问自己的类有没有这个属性,如果有,相当于自己也有

在这里插入图片描述
这样就会创建一个同名属性,用于覆盖类的
在这里插入图片描述
字典的访问说法就没有这个说法了
所谓的属性查找访问是用点号来访问的,用实例名.属性名,就用这种方式来查找
在这里插入图片描述在这里插入图片描述
一般大写是常量
在这里插入图片描述
一般都这么使用,这是公共的不要都给,需要就通过公共的访问的类属性+好以后,赋值给自己在这里插入图片描述
这是实例的查找顺序在这里插入图片描述
字典的查找方式没有顺序
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值