面向对象
什么是面向对象,以及和面向过程的对比
面向过程:
面向过程其实是一种编程思想
优点:
复杂的问题简单化,流程化
缺点:
扩展性差,可维护性差
面向对象:
对象就是一个盛放数据和功能的容器,比函数整合程度高的一个容器
优点:
扩展性强
缺点:
简单的问题复杂化
类的定义和对象的产生
类:
一系列对象相似的数据和相似的功能的结合体
对象:
数据和功能的结合体
于现实中是先有对象后有类,但是程序中是现有类,然后调用类实例化产生对象
类的定义:
"""
class 类名():
pass
类名首字母一般是大写
"""
# 拿这个实现统计一个类被实例化多少次,来举例
class Student(): #定义类
count = 0
def __init__(self,name): # 定义类的__init__方法,私有数据,初始化方法
self.name = name
Student.count += 1
stu_obj1 = Student('lyh') # 调用类,实例化产生对象,
stu_obj2 = Student('lyh')
stu_obj1.__dict__ # 查看对象的名称空间
print(Student.count)
定义类发生的几件事:
1.调用类,运行类体代码,注意这里和函数的区别,函数体代码是函数定义阶段不运行,只在函数调用阶段运行,而类,在定义的时候就运行了类体代码
2.产生类体代码变量名的名称空间
3.把这个名称空间绑定给类名
调用类发生的事:
1.产生一个空对象,并且把该空对象当初第一个参数传递
2.运行类的__init__方法,定制对象独有属性
3.返回值默认是None
属性查找方法
class Student():
school = 'ShangHaiOldbay'
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
self.courses = []
def choose_course(self, course_name):
self.courses.append(course_name)
stu1 = Student('egon', 19, 'male')
stu2 = Student('jason', 20, 'male')
print(Student.school) # 类的属性查找,用类名点
Student.school = 'xxxx' # 类的属性修改
Student.choose_course()
del Student.school # 类的属性删除
Student.xxx = 'xxxx' # 类的属性添加
stu1.school # 对象的属性查找
stu1.school = 'xxxx' # 对象的属性修改
stu1.name
stu1.xxx = 'xxxx' # 对象的属性添加
del stu1.xxx # 对象的属性删除
print(stu1.__class__) # 用对象找类
print(stu1.__class__.__name__) # 用对象找类名
'''
类中的属性是给所有对象的,类中的方法是给对象用的,并且会把对象自己当作第一个参数
类属性改变,它实例化的对象全都会变,,但是对象自己变了只影响自己,也就是对象只能自己玩
'''