面向对象
一、什么是类?
类,就是具有共同特征的事物的抽象描述,这个描述分两种:特征描述和行为描述
系统自带类:int str dict float bool
自定义类: 编程时自己定义的class
二、什么是对象?
对象是一个数据与函数的集合体
具体的人,具体的学生,具体的物资轴承阀门
对象好比一个化妆盒,有材料 ,有工具,是一个数据与函数的集合体
三、敲代码之前要思考什么?
思考\总结\归类\升华
第一步:在程序中,一定要先定义类,把对象之间共同的东西先想好,定义出来,给它丢进去.
第二步,定义类后,再调用类,产生对象.
以后在面向对象编程的时候,先不要想代码,要先想在程序中,有哪些数据和功能能够整合在一起.
四、什么是面向对象编程?
4.1类的定义与实例化
类有两种属性,数据属性与函数属性,可以通过__dict__访问属性的值
class Student: # 驼峰
school = '哈佛大学' # 数据
# #该方法会在对象产生之后自动执行,专门为对象进行初始化操作,可以有任意代码,但一定不能返回非None的值
def __init__(self, name, age, gender): # 定义特征
self.__name = name
self.__age = age
self.__gender = gender
def choose(self): # 功能
print(fr"{self.__name}\ {self.__age}\ {self.__gender}") # 功能1是输出
先看类class Student的容器内容
print(Student.__dict__) # {'__module__': '__main__', 'school': '哈佛大学', '__init__': <function Student.__init__ at 0x000001DF89AFDCF0>, 'choose': <function Student.choose at 0x000001DF89AFDD80>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
然后实例出三个学生
stu1 = Student("张三", 18, '男') # 每实例化一次Student类就得到一个学生对象
stu2 = Student("李四", 19, 'male')
stu3 = Student("王二麻", 20, 'female')
会产生对象的名称空间,同样可以用__dict__查看
print(stu1.__dict__) # {'_Student__name': '张三', '_Student__age': 18, '_Student__gender': '男'}
"哈佛大学" 作为共有属性,在类中存放,节省空间
stu1.__name = '张三三'
4.2属性访问
4.2.1类属性与对象属性
类有两种属性:数据属性和函数属性,可以通过__dict__访问属性的值 操作对象的属性也是一样
print(Stu1.school) # 哈佛大学
print(Stu1.choose) # <function Student.choose at 0x000001FE8237DD80>
print(stu1.__name) # 张三三
Student.school = '哈哈大学'
print(Student.school) # 哈哈大学
重要的一点: stu1.__name = '牧之' 和 stu1._Student__name = '张麻子',,《是不一样的》
stu1.__name = "牧之"
stu1._Student__name = '张麻子'
print(stu1.__dict__)
# {'_Student__name': '张麻子', '_Student__age': 18, '_Student__gender': '男', '__name': '牧之'}
4.2.2属性查找顺序与绑定方法
对象的名称空间里只存放着对象独有的属性,而对象们相似的属性是存放于类中的。
对象在访问属性时,会优先从对象本身的__dict__中查找,未找到,则去类的__dict__中查找
1、类中定义的变量是类的数据属性,是共享给所有对象用的,指向相同的内存地址 # 哈哈大学
2、类中定义的函数是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数
类中定义的函数主要是给对象使用的,而且是绑定给对象的,虽然所有对象指向的都是相同的功能,
但是绑定到不同的对象就是不同的绑定方法,内存地址各不相同