一、面向对象与面向过程
面向过程:实现具体的过程,为因果关系。优点是,对于业务逻辑比较简单的程序,可以做到快速的开发,前期投入成本低;缺点是,难解决非常复杂的业务逻辑,代码间的耦合度较高,只要一个环节出现问题,整个程序都会受到影响,没有独立的概念,所以组件无法复用。
面向对象:把构成问题的事务分解成各个对象,建立对象不是为了完成每一个步骤,而是为了描写某个事务在整个解决问题步骤中的行为,主要的特点是关注对象能完后才能哪些功能。优点是耦合度低,扩展性强,容易解决现实世界中更复杂的业务逻辑,容易维护,易复用,易扩展;缺点是性能较低,学习难度大。
二、类和对象
1,概念定义
类: 是对一些具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用。
对象:是 由类创建出来的一个具体存在,可以直接使用。
2,类和对象的关系
- 类是模板,是对一些具有相同特征或者行为的事物的一个统称,是抽象的。
- 对象 是 由类创建出来的一个具体存在。
- 类是不可以直接使用的。
- 对象是可以直接使用的。
三、类
1,类的构成
- 类的名称:
eg : 狗(dog) - 类的属性:
eg :品种、毛色、性别、名字 - 类的行为:
eg :叫、吃、摇尾巴
2,类的定义
语法格式:
class 类名:
方法列表
# class Game: #经典类定义形式
# class Game():
# 新式类定义格式
class Game(object):
def begin(self):
print("Hello World!")
代码释义:
- 类可以分为两种形式:经典类与新式类。
- object是python中所有类的顶级父类。
- 类名的命名规则按照“大驼峰命名法”,首字母一般大写。
- begin是一个示例方法,第一个参数一般是self,表示示例本身,也可以将self换位其他,self是一个变量,这个变量指实例对象。
四、对象
1,对象的定义
语法格式:
对象1 = 类名()
对象2 = 类名()
对象3 = 类名()
# class Game: #经典类定义形式
# class Game():
# 新式类定义格式
class Game(object):
def begin(self):
print(self)
print("HELLO WORLD!!!")
# Game 这个类实例化一个对象game1
game1 = Game()
# 对象调用实例方法begin(),并执行begin()方法里面的代码块
game1.begin()
#打印对象内存中的地址,与begin()方法里面的print(self)一致。
print(game1)
# 以内存地址的十进制形式显示
print(id(game1))
显示结果:
2,添加和获取对象的属性
定义一个Enemy敌人类,添加get_attack被攻击与set_attack主动攻击的方法,并且给
class Enemy(object):
def get_attack(self):
print("敌人受到攻击!")
def set_attack(self):
print("敌人开始攻击!")
thanos = Enemy()
# 给对象添加属性以及对应的属性值
thanos.name = '珊珊' # 姓名
thanos.hp = 999 # 生命值
thanos.attack = 888 # 攻击力
thanos.DEF = 3999 # 防御力
# 获取对象的属性值
print("敌人 %s 的生命值 : %d" % (thanos.name,thanos.hp))
print("敌人 %s 攻击力 : %d" % (thanos.name,thanos.attack))
print("敌人 %s 防御力 : %d" % (thanos.name,thanos.DEF))
# 获取对象的属性值
thanos.set_attack()
thanos.get_attack()
显示结果:
3,通过self获取对象属性
实例方法内通过self()和获取对象属性。
class Enemy(object):
def get_attack(self):
print("敌人受到攻击!")
def set_attack(self):
print("敌人开始攻击!")
def print_info(self):
print("敌人 %s 的生命值 : %d" % (self.name,self.hp))
print("敌人 %s 攻击力 : %d" % (self.name,self.attack))
print("敌人 %s 防御力 : %d" % (self.name,self.DEF))
thanos = Enemy()
# 给对象添加属性以及对应的属性值
thanos.name = '珊珊' # 姓名
thanos.hp = 999 # 生命值
thanos.attack = 888 # 攻击力
thanos.DEF = 3999 # 防御力
# 获取对象的属性值
thanos.print_info() #只需要调用实例方法print_info就可获取属性
thanos.set_attack()
thanos.get_attack()
显示效果: