面向过程
面向过程就是先干什么后干什么,有顺序写,例如之前所写的ATM,就是面向过程。
优点:复杂问题简单化。缺点:扩展性比较差,其中一部分要修改,就要修改很多位置,牵一发而动全身。
对扩展性要求不高的地方可以使用面向过程。
面向对象
在生活中,对象就是“特征”和“技能”的结合体。
在过程中,对象就是属性(变量)和方法(函数和功能)的结合体。也就是功能和数据的结合体。
优点:扩展性强
缺点:复杂了
一般用于扩展性要求比较高的地方。
类的定义和对象的产生
类是对象相似“数据”与“功能”的集合体。
类体中最常见的就是“变量”和“函数”的定义,但是类体中也可包含任意其他代码。函数写在类里就叫方法。
并且需要先定义类,再调用类产生对象。(先想功能中共有的)
类体代码在定义阶段就会执行,会产生类的名称空间,调用阶段不会触发,因为在定义阶段就已经开始运行。会把类的名称空间绑定给__dict__属性,如何查看:类名.__dict__。
类的数据属性是共享给所以对象用的,大家访问的地址一样,类改值可以直接改,但是对象改类的值无法改,当对象中没有要改的值时,会自己造一个实例化,调用类。调用类:类名()。
定制对象自己独有的属性
类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用。
调用类会自动触发类里的__init__方法,然后会把得到的对象本身当成第一个参数自动传递。
名字查找顺序
属性的查找顺序分两大类:
类属性:在类里面定义就是类属性
对象属性:对象自己独有的属性
class Student(): school = 'sh' def __init__(self,name,age): self.name = name self.age = age # print(Student.__dict__) stu = Student('lin','18') print(stu.__dict__) #{'name': 'lin', 'age': '18'} # #类查看 # print(Student.school) #sh # #类增加 # Student.salsry = 20000 # print(Student.__dict__) # #类修改 # Student.salsry = 28000 # print(Student.__dict__) # #类删除 # del Student.salsry # print(Student.__dict__) #对象查看 print(stu.age) #18 print(stu.name) #lin print(stu.school) #sh (这个比较特殊,当对象中没有时就会从类中找) #对象增加 stu.salary = 20000 print(stu.__dict__) #'name': 'lin', 'age': '18', 'salary': 20000} #对象修改 stu.salary = 28000 print(stu.__dict__) #{'name': 'lin', 'age': '18', 'salary': 28000} #对象删除 del stu.salary print(stu.__dict__) #{'name': 'lin', 'age': '18'}
练习题
# 定义两个英雄类: # 每个英雄初始化的数据有:昵称、生命值、法力、攻击力() # 定义一个计数器,记录产生了多少个对象 class Heros(): count = 0 def __init__(self, name, HP, power, attack): self.name = name self.HP = HP self.power = power self.attack = attack Heros.count += 1 hero = Heros('angle','10000','1000','2000') hero1 = Heros('di','20000','1000','5000') print(hero.__dict__) print(hero1.__dict__) print(hero.count)
标签:__,.__,name,stu,面向对象,dict,print From: https://www.cnblogs.com/YeeQX/p/17503257.html