面向过程是按照问题的解决方式来编写程序。需要先分析出解决问题的方法,然后按照这个方法一步步的去完成程序,所有细节都需要自己去实现,优点是程序细节自己把握,缺点是工作量巨大。
比如:出门旅游
面向对象,更贴近人的思维模式,处理问题需要找到对应的人,然后解决问题。面向对象能使程序员从软件架构的方向去思考程序的开发,有助于梳理结构分析问题。
面向对象的三大特征如下:
有利于代码的复用提高编码效率,可扩展性很强,增加新功能不需要修改原来的代码,软件逻辑结构清晰,有助于后期维护。
比如:出门旅游
一站式服务,不需要自己亲自处理。
class StudentInformation:
def __init__(self, name):
self.name = name
def read_stu(self):
pass
class StudentInformation:
# 类成员student_number,表示当前student的数量
student_number = 0
def __init__(self, name):
self.name = name
StudentInformation.student_number +=1
def read_stu(self):
pass
stu01 = StudentInformation("abc")
print(stu01.student_number) # 输出 1
@classmethod
def display_student(cls, **kwargs):
pass
StudentInformation.display_student()
Note:
stu01 = StudentInformation("abc")
Note:
# 创建新对象成员age
stu01.age = 10
# 创建新对象成员age
stu01.age = 20
# age = 20
print(stu01.age)
@staticmethod
def static_student():
pass
StudentInformation.static_student()
Note:
静态方法不能访问实例成员和类成员
作用:定义常用的工具函数。
class Enemy:
def __init__(self, name, hp, atk):
self.name = name
self.hp = hp
self.atk = atk
# *******************写法1 start *****************************
def set_hp(self, hp):
if 100 < hp < 200:
self.__hp = hp
else:
raise ValueError("hp out of range")
def get_hp(self):
return self.__hp
hp = property(get_hp, set_hp)
def set_atk(self, atk):
if 20 < atk < 30:
self.__atk = atk
else:
raise ValueError("atk out of range")
def get_atk(self):
return self.__atk
atk = property(get_atk, set_atk)
# *******************写法1 end *****************************
# # *********************写法2 start ********************************
# # 设置hp读取属性
# @property
# def hp(self):
# return self.__hp
# # 设置hp 写属性
# @hp.setter
# def hp(self,hp):
# if 100 < hp < 200:
# self.__hp = hp
# else:
# raise ValueError("hp out of range")
#
# # 设置atk 读属性
# @property
# def atk(self):
# return self.__atk
#
# #设置atk 写属性
# @atk.setter
# def atk(self, atk):
# if 20< atk <30:
# self.__atk = atk
# else:
# raise ValueError("atk out of range")
# # ****************写法2 end***********************************
e01 = Enemy("wukong",101,25)
例如软件设计的结构之一 MVC(Model, View, Control)就是使用的这种思想,将界面,数据和逻辑单元分开设计。
父类的一种行为在子类中有不同的实现方式。
# 父类Thing
class Thing():
def __init__(self, name):
self.name = name
# 子类中必须实现的方法
def reduce_hp(self):
raise NotImplementedError
class Granades:
def damage(self, thing):
if isinstance(thing, Thing): #判断传入的参数thing是不是要求传入的参数对象Thing
thing.reduce_hp()
else:
raise ValueError("Not Object Things")
# Thing 的子类Tree
class Tree(Thing):
def __init__(self, name):
super().__init__(name=name)
def reduce_hp(self):
print("手雷炸断了{}".format(self.name))
# Thing 的子类House
class House(Thing):
def __init__(self, name):
super().__init__(name=name)
def reduce_hp(self):
print("手雷炸塌了{}".format(self.name))
g01 = Granades()
h01 = House("别墅01")
t01 = Tree("大树01")
g01.damage(h01)
g01.damage(t01)