1 2 3 4

# 什么是类(class)?
# 类是就是对象,也就是数据与功能的集合体
# 所以类体中最常见的是变量与函数的定义,但是类体其实是可以包含任意其他代码的
# 注意:类体代码是在类定义阶段就会立即执行,会产生类的名称空间



# 类体最常见的是变量的定义和函数的定义,但其实类体可以包含任意Python代码,类体的代码在类定义阶段就会执行,
# 因而会产生新的名称空间用来存放类中定义的名字,可以打印Student.__dict__来查看类这个容器内盛放的东西

1、定义一个类:
class Student:
# 1、变量的定义
stu_school='oldboy'

# 空对象,'egon',18,'male'
def __init__(obj,x,y,z):
obj.stu_name=x # 空对象.stu_name='egon'
obj.stu_age=y # 空对象.stu_age=18
obj.stu_gender=z # 空对象.stu_gender='male'
# return None

# 2、功能的定义
def tell_stu_info(stu_obj):
print('学生信息:名字:%s 年龄:%s 性别:%s' %(
stu_obj['stu_name'],
stu_obj['stu_age'],
stu_obj['stu_gender']
))

def set_info(stu_obj,x,y,z):
stu_obj['stu_name']=x
stu_obj['stu_age']=y
stu_obj['stu_gender']=z

# print('========>')

# 属性访问的语法
# 1、访问数据属性
# print(Student.stu_school) # Student.__dict__['stu_school']
# 2、访问函数属性
# print(Student.set_info) # Student.__dict__['set_info']

属性查找顺序与绑定方法

   对象的名称空间里只存放着对象独有的属性,而对象们相似的属性是存放于类中的。

对象在访问属性时,会优先从对象本身的__dict__中查找,未找到,则去类的__dict__中查找


2、再调用类产生对象
调用类的过程称为将类实例化,拿到的返回值就是程序中的对象,或称为一个实例,发生了三件事:
# 1、先产生一个空对象
# 2、python会自动调用类中的__init__方法然将空对象以及调用类时括号内传入的参数一同传给__init__方法
# 3、返回初始完的对象
stu1_obj=Student('egon',18,'male') # Student.__init__(空对象,'egon',18,'male')
# stu2_obj=Student('lili',19,'female')
# stu3_obj=Student('jack',20,'male')

1.类中定义的变量是类的数据属性,是共享给所有对象用的,指向相同的内存地址
2.类中定义的函数是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数
ps: 但其实类中定义的函数主要是给对象使用的,而且是绑定给对象的,虽然所有对象指向的都是相同的功能,
但是绑定到不同的对象就是不同的绑定方法,内存地址各不相同。

绑定到对象的方法特殊之处在于,绑定给谁就应该由谁来调用,谁来调用,就会将’谁’本身当做第一个参数自动传入(方法__init__也是一样的道理)
# 总结__init__方法
# 1、会在调用类时自动触发执行,用来为对象初始化自己独有的数据
# 2、__init__内应该存放是为对象初始化属性的功能,但是是可以存放任意其他代码,想要在
# 类调用时就立刻执行的代码都可以放到该方法内
# 3、__init__方法必须返回None

总结:

        在上述介绍类与对象的使用过程中,我们更多的是站在底层原理的角度去介绍类与对象之间的关联关系,如果只是站在使用的角度,

我们无需考虑语法“对象.属性"中”属性“到底源自于哪里,只需要知道是通过对象获取到的就可以了,所以说,对象是一个高度整合的产物,

有了对象,我们只需要使用”对象.xxx“的语法就可以得到跟这个对象相关的所有数据与功能,十分方便且解耦合程度极高。

 

 
posted @ 2020-04-07 18:06  臭弟弟d  阅读(158)  评论(0编辑  收藏  举报