面向对象和面向过程的区别:
面向过程 和 面向对象,是两种不同的编程方式
面向过程 —— 怎么做
面向对象 —— 谁来做
面向过程:把某一需求所需的步骤从头到尾逐步实现。根据开发需求,将将某些功能独立的代码封装成函数。在执行时,按顺序地调用不同的函数。
面向对象:在完成某一个需求前,首先确定职责一一要做的事情(方法)。根据不同的职责确定不同的对象,在对象内部封装不同的方法。在执行时,按顺序地让不同的对象调用不同的方法。
类和对象
类 是抽象的,不能直接使用
类的组成:
类属性 : 例如下面的实例中的nickName和health就是类的属性
实例方法 :例如下面的实例中的show()方法就为实例方法
静态方法
类方法
对象是由类创建出来的一个具体存在,可以直接使用
类的定义:
class 类名:
def 方法1(self,参数列表):
pass
def 方法2(self,参数列表):
pass
创建对象: 对象变量 = 类名()
例如:d=Dog()
对象的调用:对象名.方法名() 或者 类名.方法名(类的对象)
类的初始化方法
当使用 类名( ) 创建对象时,会自动
- 为对象在内存中分配空间一一创建对象(__new__)
- 为对象的属性设置初始值一一初始化方法(__init__)
这个初始化方法就是__init__方法, __init__是对象的内置方法,在类创建对象的时候,会先后调用__new__和__init__两个方法
如果在创建对象时,设置对象的属性,可以对__init__方法进行初始化的同时设置初始值
- 在方法内部使用 self.属性 = 形参 接收外部传递的参数。例如:下面实例中的__init__()方法
- 在创建对象时,使用类名(属性1,属性2,,)调用。例如:d=Dog('毛毛',5,'黑色')
实例:
编写宠物类Pet
要求:
类中的属性有:
nickName:表示昵称;
health:表示宠物的健康值。
类中的方法有:
构造方法__init__:用于初始化昵称和健康值;
show方法:用于输出宠物的昵称、健康值。
class Pet:
nickName = ''
health = 0
def __init__(self,n,h):
self.nickName = n
self.health = h
def show(self):
print("昵称:%s"%self.nickName)
print("健康值:%d"%self.health)
编写犬类Dog
要求:
继承父类(宠物类),增加颜色属性color;
编写构造方法__init__,用于初始化昵称、健康值和颜色;
重写继承自父类的show方法,输出宠物的昵称、健康值和颜色;
编写feed方法:对宠物的“喂食”方法,完成一次喂食后宠物的健康值+5。
class Dog(Pet):
color = ''
def __init__(self,n,h,c):
Pet.__init__(self,n,h)
self.color = c
def show(self):
Pet.show(self)
print("颜色:%s"%self.color)
def feed(self):
self.health +=5
创建Dog类的对象d
要求:
昵称为“毛毛”,初始健康值为5,颜色为“黑色”。
分别调用该对象的feed及show方法
d=Dog('毛毛',5,'黑色')
d.feed()
d.show()