1.实例化过程
对象就是类实例化的结果,我们可以模仿函数的调用方式来进行实例化的过程,如下图所示:
可以发现,函数是函数名(实参1,实参2,...),而实例化是类名(self,参数1,参数2,...),实例化的过程看下图:
可以发现在实例化的过程中,先是加载了类中的所有代码块(先后打印了:下面是开门的方法、下面是关门的方法、这个门打开了),再执行了构造函数。
2.对象属性相关
2.1 数据属性
在执行构造函数的过程中自动将数据添加到对应的实例的数据字典中,如下图所示:
那么如何进项数据属性查询呢?1.我门可以参看使用函数来进行面向对象的设计,可以使用实例名+点(英文.)来直接访问;2.可以使用实例的属性字典,按照字典的操作来访问对应的属性,如下图所示:
注意:其实方法一是方法二的一个简化操作,执行方法一就是在内部执行方法二。
代码块如下:
class Door():
"门的类"
address = "浙江省杭州市"
def __init__(self,size,color,type):#构造函数
"初始化门的数据"
self.size = size
self.color = color
self.type = type
def open(self):
"门打开的方法"
print("这个%s门打开了" %self.type)
def off(self):
"门关闭的方法"
print("这个%s门关闭了" %self.type)
door1 = Door(16, 'red', '木门') # 门的实例化1,实例名命名规范首字母小写
print(door1.__dict__) #对象的属性字典
#对象的数据属性访问
#方法1.使用实例名+点
print(door1.size)
#方法2.使用实例字典的性质进行访问
print(door1.__dict__['color'])
2.2数据属性的范围
风湿理论在实例过程的中应用,如下图所示:
从上图可以发现,在查找实例的数据属性的过程是:首先查找实例的属性字典(也就是类中的init构造函数,将其存进属性字典中),如果类的属性字典中没有,则去构造函数inti的上一层(也就是类下的第一层中查找)也就是类的属性字典中查找,如果还没有该属性,则报错,不再望类之后查找。这与函数变量作用域的LEGB原则有所区别。
2.3实例的属性
我们从实例的属性字典中可以发现,实例的属性字典中并没有函数属性,所以根据风湿理论,此时会去类的属性字典中查找。如下图所示: