面向过程、面向对象、类的定义和对象的产生、定制对象自己独有的属性、名字的查找顺序(重点)
面向对象
面向过程
面向过程:其核心就是过程,过程就是流水线,分步骤解决问题,将程序流程化。
代码案例,实现面向过程的例子:
1.接受用户名和密码
2.做逻辑处理,验证参数
3.将数据写入文件中
优点:把复杂的问题简单化,进而流程化
缺点:扩展性差
使用场景: 对扩展性要求不高的地方,一般使用面向过程
面向对象
面向对象的核心就是‘对象’,在python中,一切皆对象!
对象:用来盛放数据属性和方法的结合体
优点:扩展性强
缺点:编程复杂度变高了
使用场景:一般用在对扩展性要求较高的地方
类的定义和对象的产生
类:就是一系列相似的特征和相似的技能的结合体
在程序中:
必须先定义类,在调用类产生对象
# 定义类的语法格式: """ class 类名(): pass 类名:遵循变量的命名规范,一般情况首字母大写,如果类名很长,推荐使用大驼峰命名 """ class Student(): school = 'SH' country = 'CHina' def choose_course(self): pass
# 给学生类定义一个属性和方法 class student(): school = 'SH' # school 就是一个属性,属性就是变量 counntry = 'China' # 在类里面定义的函数叫方法 def choose_course(stu_dict,course): stu_dict["courses"].append(course) print("%s选择了%s成功,%s" % (stu_dict["name"], course, stu_dict["courses"])) def func(self): pass # print("helloworld") # print("helloworl1111d")
"函数如果不调用,不会调用函数体代码。"
定义类发生的事情:
1. 类一旦被定义,会立马执行类体代码
2.类一旦定义完成,会产生类的名称空间,会将类中的名字放在类的名称空间去
3.会把类的名称空间绑定给__dict__属性。
如何查看类的名称空间:类名.__dict__
eg: print(Student.__dict__)
如何产生对象:在程序中,必须先定义类,然后实例化,调用类产生对象
得到的每一个对象都有自己的名称空间,但是,类的名称空间是所有对象共有的名称空间。
实例化出的对象其实是一个空对象,空字典。
如何调用类:类名()
eg: stu = Student() # 得到的结果stu为一个对象
如何查看对象的名称空间: 对象名.__dict__
eg:print(stu.__dict__) # 调用类产生对象,得到的是一个空对象,其实就是空字典
“““ 每调用一次类,都会产生一个对象,并且产生的对象之间是相互独立,互不影响的”””
调用类的过程也是实例化的过程,得到的结果就是一个实例
定制对象自己独有的属性
class Student(): # school就是一个属性 school = 'SH' # 属性就是变量 # __init__这个函数名不能改名字,必须叫这个名字,一点都不能差 def __init__(stu_obj, name, age, gender, salary): stu_obj.name = name # stu.__dict__['name'] = 'kevin' stu_obj.age = age # stu.__dict__['age'] = '18' stu_obj.gender = gender # stu.__dict__['gender'] = 'male' stu_obj.salary = salary # stu.__dict__['salary'] = '1800'
怎么得到一个对象
调用类会自动的触发类里面的__init__方法,然后会把得到的对象本身当成第一个参数自动传递
"""__dict__开头的属性或者方法都有他自己的特殊含义,一般不建议使用"""
名字的查找顺序(重点)
属性的查找顺序分两大类:
类属性:在类里面定义的属性就是类属性
查看:
print(Student.school)
增加:
Student.x = 'a' Student.y = 'b'
改:
Student.x = 10
删除;
del Student .school
对象属性:就是对象自己独有的属性
print(stu.__dict__)
查看:
print(stu.__dict__['name']) print(stu.__dict__['age']) print(stu.__dict__['gender'])
或者:
print(stu.name) print(stu.age) print(stu.gender) stu.school = 10 print(stu.__dict__)
"""这是个特殊的:对象属性的查找顺序是:先在自己对象的名称空间中查找,如果找不到再去产生这个对象的类中取找,如果找不到,就报错"""
增加:
stu.x = 1
改:
stu.x = 10
删除:
del stu.school
浙公网安备 33010602011771号