面向过程 VS 面向对象
面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。
面向过程
优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。
缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。
面向过程
优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。
了解一些名词:类、对象、实例、实例化
类:具有相同特征的一类事物(人、狗、老虎)
对象/实例:对象就是具体的拥有准确属性值的一些变量具体的某一个事物(隔壁阿花、楼下旺财)
实例化:类——>对象的过程(这在生活中表现的不明显,我们在后面再慢慢解释)实例化:从一个类中创造一个具体的对象的过程
初识面向对象
类的最基本形式 class Person: #类名有两个作用 country = '中国' #静态属性、数据属性 def walk(self): #动态属性、函数属性、方法 print('walk')
1.属性引用 在静态属性中的操作 print(Person.country) #静态属性的查看 print(Person.walk) Person.role = '人' #添加一个新静态属性 Person.country = '印度' #修改一个新静态属性静态属性 注意:在静态属性中的内容不能用下边这两种方法来处理,会报错 #Person.__dict__['country']='印度' #Person.__dict__['love']='beautiflgirl' del Person.role #删除一个静态属性 print(Person.__dict__) print(Person.walk()) #报错 少self参数 Person.__dict__['country'] = '印度' #报错 不能改变 print(Person.__dict__['country']) print(Person.country)
实例化
p = Person() print(p) #Person的对象 class Person: #类名有两个作用 country = '中国' #静态属性、数据属性 def __init__(self,life_value,aggr,name,job): #初始化方法 #self = {'lv':life_value} self.lv = life_value #属性,对象属性 self.aggr = aggr self.name = name self.job = job def walk(self): #动态属性、函数属性、方法 print('%s is walking'%self.name) # # p = Person() #如何让对象拥有具体的属性 # p = Person(1000,2,'金老板','boss') #如何让对象拥有具体的属性
print(p.__dict__) 这种方法可以查看所有的属性,以键值对的形式存在 # p.walk() # Person.walk(p) #调用里边的walk函数 # print(p.lv) #Person的对象的属性查看 # print(p.aggr) #Person的对象 # p.sex = 'lady_boy' #添加一个属性 直接加 # print(p.sex) # p.sex = 'girl' #属性的修改,直接修改 # print(p.sex) # del p.sex #属性删除
用p.__dict__方法做的增删改查操作
# print(p.__dict__) # print(p.__dict__['lv']) #查看 # p.__dict__['lv'] = 998 #对象名.__dict__中的属性值可以被修改 # print(p.__dict__['lv'],p.lv) # p.__dict__['sex'] = 'lady_boy' #对象名.__dict__中的属性值可以增加 # print(p.__dict__,p.sex) # p.__dict__.pop('sex') #对象名.__dict__中的属性值可以被删除 # print(p.__dict__)
#实例化 ——类名(参数)
#构造方法:造对象
#初始化__init__:给这个赤裸裸的对象添加一些属性 __init__
#返回了一个初始化之后的对象
#__init__方法:初始化方法,可以没有。给对象添加一些必要的基础属性
#self的含义:就是这个对象本身
#对象和属性的操作:对象名.属性名 对象名.__dict__[‘属性名’]