一、面向对象
1、类
类是一系列事件的统称,同类事物必定具有相同的特征。
(1)特征
状态(品种,重量等)/变量(成员变量)
(2)类的定义
定义格式一:
class 类名:
pass
定义格式二:
class 类名:
成员
class Cat:
pass
(3)创建对象
格式:
变量名 = 类名()
cat1 = Cat()
2、类成员
成员变量
(1)定义格式一:
class 类名:
def __init__(self):
self.变量名1 = 值1
self.变量名2 = 值2
self.变量名3 = 值3
调用格式:
取值:对象名.变量名
赋值:对象名.变量名 = 值
(2)定义格式二:
对象.变量名 = 值
调用格式:
取值:对象名.变量名
赋值:对象名.变量名 = 值
注意:
格式二声明变量:
如果变量名不存在视为定义变量
如果变量名存在视为调用变量
(3)总结
两种变量定义的区别:
1、在类定义中声明的变量为公有变量/公有属性,每个对象均存在此变量对应的属性
2、在创建对象后声明的变量为独有变量/独有属性,仅当前对象存在此变量对应的属性
例子:
class Cat:
def __init__(self):
self.type = "波斯猫"
self.name = None
cat1 = Cat()
print(cat1.type)
cat1.name = "大帅"
print(cat1.name)
#给cat1穿衣服
cat1.cloth = "red"
print(cat1.cloth)
3、类的成员方法
(1)定义格式一:
class 类名:
def 方法名(self):
方法体
调用格式一:
对象名.方法名()
注意:
self仅在声明时占位,无需传递具体参数
(2)定义格式二:
class 类名:
def 方法名(self,形参1,形参2...):
方法体
调用格式二:
对象名.方法名(实参1,实参2...)
例子:
def eat(self):
print("猫吃鱼")
def climb(self, meter):
print("猫会爬树,爬了%d米" % meter)
4、__init__方法
__init__方法在创建对象时被执行,无需手工调用即可执行
对于程序中声明、定义的方法在特定时机自动执行的方法,称为魔术方法
5、__str__方法
__str__方法在使用print函数打印输出对象到屏幕时被执行,无需手工调用即可执行。该方法也属于魔术方法
__str__()格式:
def __str__(self):
return 打印对象时显示的信息
二、成员方法条用成员
1、成员方法调用成员变量
公有变量:直接访问,通过self进行
独有变量:访问要慎重,跨对象要重定义
例子:
class Cat:
def __init__(self):
# 公有变量
self.type = "波斯猫"
self.name = None
def introduce(self):
print("我是一只%s,我叫%s,我是%s色的" %(self.type,self.name,self.color))
cat1 = Cat()
cat1.name = "大帅"
# 独有变量
cat1.color = "red"
cat1.introduce()
cat2 = Cat()
cat2.name = "小帅"
#cat2.introduce()#第二个对象访问第一个对象的私有变量,会报错
2、成员方法调用成员方法
直接用self.方法()来调用
例子:
class Phone:
def __init__(self):
self.power = 100
def game(self):
'''打游戏'''
if self.power < 10:
print("当前电量不足以打游戏,打游戏操作提前终止")
else:
print("正在打游戏,耗电10")
self.power -= 10
def music(self):
if self.power < 5:
print("当前电量不足以打听歌,听歌操作提前终止")
else:
print("正在听歌,耗电5")
self.power -= 5
def call(self):
if self.power < 4:
print("当前电量不足以打电话,打电话操作提前终止")
else:
print("正在打电话,耗电4")
self.power -= 4
def answer(self):
if self.power < 3:
print("当前电量不足以接电话,接电话操作提前终止")
else:
print("正在接电话,耗电3")
self.power -= 3
def charge(self, num):
if self.power + num > 100:
self.power = 100
print("充电操作提前结束,当前电量%d" % self.power)
else:
print("正在充电,充电量是%d" % num)
self.power += num
def __str__(self):
return "当前电量%d" % self.power
p = Phone()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.music()
p.answer()
print(p)
p.charge(5)
print(p)
p.charge(100)
p.music()
p.music()
p.music()
print(p)
p.charge(10)
print(p)
---------------------------------------------------
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
当前电量不足以打听歌,听歌操作提前终止
当前电量不足以接电话,接电话操作提前终止
当前电量0
正在充电,充电量是5
当前电量5
充电操作提前结束,当前电量100
正在听歌,耗电5
正在听歌,耗电5
正在听歌,耗电5
当前电量85
正在充电,充电量是10
当前电量95
三、封装
1、私有
对成员私有化可以有效的保护从类的外部对类的内部成员进行访问
(1)私有属性定义格式
self.__属性名 = 值
(2)私有方法定义格式
delf __方法名(self):
方法体
2、封装
封装操作可以对受访问保护的成员进行功能开放的控制,达到保护数据不被非法访问的目的
3、封装的标准格式
(1)对受保护的变量进行私有设置
self.__变量名 = 值
(2)提供对外访问器
访问器(get方法)
def get_变量名(self):
return __变量名
(3)修改器(set方法)
def set_变量名(self,形参):
self.__变量名 = 形参
(4)封装案例
class Cat:
def __init__(self):
self.__type = "波斯猫"
self.__name = None
def get_type(self):
return self.__type
def set_type(self,type):
self.__type = type
def get_name(self):
return self.__name
def set_name(self,name):
self.__name = name
cat1 = Cat()
cat1.set_name("大帅")
print(cat1.get_name())
4、init(构造方法)自定义参数
为了方便私有属性get和set,因此可以在init自定义参数,这样在对象创建的时候就可以给私有属性赋值。
def __init__(self,形参1,形参2):
self.__属性名1 = 形参1
self.__属性名2 = 形参2
五、作业
【代码题】
定义一个水果类,然后通过水果类,创建苹果对象、橘子对象、西瓜对象并分别添加属性:颜色和价格
# 定义一个水果类,然后通过水果类,创建苹果对象、橘子对象、西瓜对象并分别添加属性:颜色和价格
class fruit:
def __init__(self,color,price):
self.color = color
self.price = price
apple = fruit("red",24)
print("苹果是%s的,价格是%d元一斤" %(apple.color,apple.price))
orange = fruit("orange",25)
print("橘子是%s的,价格是%d元一斤" %(orange.color,orange.price))
watermelon = fruit("green",30)
print("西瓜是%s的,价格是%d元一斤" %(watermelon.color,watermelon.price))
【代码题】
定义一个电脑类,电脑有品牌,有价格,能放电影。分别创建2个对象"联想电脑" 和 "苹果电脑"。调用放电影的动作,联想电脑播放 电影"葫芦娃",苹果电脑播放"黑猫警长"。
class Computer:
def __init__(self,type,price):
self.type = type
self.price = price
def moived(self,moive):
print("我可以播放%s电影" % moive)
com1 = Computer("联想电脑",10000)
print("我是%s,我的价格是%d元" %(com1.type,com1.price))
com1.moived("葫芦娃")
com1 = Computer("苹果电脑",12000)
print("我是%s,我的价格是%d元" %(com1.type,com1.price))
com1.moived("黑猫警长")