面向对象
1.对象的含义
就是存放数据和函数的容器
2.对象的优缺点
优点:扩展性强,可维护性高
缺点:编程复杂性高
3.对象示例
def choose_course(stu_dict,course):
stu_dict['course'].append(course)
print('%s选课成功 %s'%(stu_dict['name'],stu_dict['course']))
stu1 = {
'name':'jason',
'age':18,
'gender':'male',
'course':[],
'choose_course':choose_course
}
stu1['choose_course'](stu1,'python')
4.类的定义和对象的产生
4.1类的定义
一系列对象相似的特征与相似的技能的结合体
4.2类的语法句式
class 类名():
pass
注意:类名一般首字母大写
4.3定义类时类内部发生什么
4.3.1 立即执行类体代码
4.3.2 产生一个类的名称空间,把类体里面执行的名字都放到名称空间里
4.3.3 把类的名称空间绑定给__dict__
4.3.4 类名.__dict__可以查看名称空间
4.4对象的产生
在程序中必须先定义类
然后调用类产生对象(先有类再产生对象)
默认产生的是一个空对象{}
4.5示例
class Student():
# 定义一个数据属性
school = 'SH'
# 定义一个技能(函数)属性
def choose_course():
stu_dict['course'].append(course)
print('%s选课成功%s'%s(stu_dict['name'],stu_dict['course']))
# 调用类产生对象 默认产生的就是一个空对象{}
stu1 = Student()
# 查看类的名称空间
print(Student.__dict__)
# 查看对象的名称空间
print(stu1.__dict__)
5.给对象制定自己独有的属性
5.1示例
class Student():
# 定义一个数据属性
school = 'SH'
# 定义一个调用类自动触发的函数
# 该函数不是一定要定义,需要用到就定义,不用刻意定义
def __init__(stu_obj,name,age,gender):
# 空对象.name = name
stu_obj.name = name
stu_obj.age = age
stu_obj.gender = gender
# 没有返回值
# 定义一个技能(函数)属性
def choose_course(stu_dict,course):
stu_dict['course'].append(course)
print('%s选课成功%s'%(stu_dict[name],stu_dict[course]))
stu1 = Student('jason',18,'male')
print(stu1.name) # jason
5.2调用类发生了什么
5.2.1得到一个空对象
5.2.2调用类 类名.__dict__(空对象,参数...)
5.2.3得到一个初始化的结果(对象)
6.属性的查找顺序
6.1示例
class Student():
# 定义一个数据属性
school = 'SH'
def __init__(self,name,age,gender,course=None):
if course is None:
course = []
self.name = name
self.age = age
self.gender = gender
self.course = course
def choose_course(self,course):
self.course.append(course):
print('%s选课成功%s'% (self.name,self.course))
def func(self,name,age):
pass
属性的查找:
先从对象自己的名称空间查找,然后再去产生对象的类的名称空间去找
6.2类和对象属性的增删改查
6.2.1类的属性增删查
1.查找
print(Student.school) # SH
2.增加
Student.country = 'china'
3.修改
Student.school = 'BJ'
4.删除
del Student.school
6.2.2对象的属性增删改查
1.查找
print(stu.name) # jason
2.增加
stu.hobby = 'read'
3.修改
stu.name = 'ly'
4.删除
del stu.name
6.3类方法的调用
类中的方法 类自己可以调用 对象也可以调用
6.3.1类调用方法
# 类调用方法 函数括号里的参数有几个就要传几个参数
Student.choose_course(stu,'python')
6.3.2对象调用方法
# 函数调用方法 会把自己当作第一个参数传给函数
stu.choose_course('python') # stu.choose_course(stu,'python')