文章目录
一、面向对象的含义
面向对象,就行一种编程思想
类:具有相同属性或者相同行为的一类事物,就叫类;类是抽象的
对象:对象就是类的具体实列;对象是真实存在的
世界万物都是对象
二、面向对象车案列
class Car(): #首字母大写
def run(self):
print('车会跑')
def music(self):
print('车能听音乐')
mbc = Car() #创建一个面包车对象
mbc.run() #调用面包车跑的对象
mbc.music() #调用面包车听音乐的对象
三、面向对象动物案列
class DongWu():
def jiao(self):
print('动物会叫')
def pao(self):
print('动物会跑')
def flay(self):
print('动物会飞')
niao = DongWu()
niao.jiao()
niao.pao()
niao.flay()
ren = DongWu()
ren.flay()
ren.pao()
四、面向对象赋值属性
class Dog():
def eat(self):
print('吃东西')
def sleep(self):
print('睡觉')
hsq = Dog()
hsq.eat()
hsq.sleep()
hsq.name = '小兰'
hsq.age = 12
print(hsq.name)
lg = Dog()
lg.eat()
lg.sleep()
五、魔法方法
__init__方法会在创建的对象的时候自己执行
self指的是对象本身
_str_返回什么值 打印对象的时候就会打印什么值
class people():
def __init__(self,name,age): # 构造方法、魔法方法、初始化
self.name = name
self.age = age
def __str__(slef):
return slef.age
def eat(self):
print('吃饭')
def sleep(self):
print('睡觉')
hujian = people('胡见','25') #创建对象
print(hujian)
print(hujian.age)
hujian.sleep()
hujian.eat()
六、楼房案例
class lf:
def __init__(self,name,height):
self.name = name
self.height = height
def juzhu(self):
print('房子可以居住')
def gao(self):
print('房子高')
pingfang = lf('平房','36米')
pingfang.juzhu()
pingfang.gao()
print(pingfang.name)
print(pingfang.height)
七、个人信息面向对象版本
class IdCard():
def __init__(self):
self.l = [] #装所有人的信息
def add(self):
d = {}
name = input('请输入姓名:')
age = input('请输入年龄:')
gender = input('请输入性别:')
d['name'] = name
d['age'] = age
d['gender'] = gender
self.l.append(d)
print(self.l)
def find(self):
A = False
name = input('请输入您要查找的名字:')
for i in self.l:
if i.get('name') == name:
print('姓名:{}\n年龄:{}\n性别:{}'.format(name, i.get('age'), i.get('gender')))
A = True
break
if A == False:
print('查无此人')
def xiugai(self):
A = False
name = input('请输入您要修改的名字:')
for i in self.l:
if i.get('name') == name:
while True:
print('1.修改名字')
print('2.修改年龄')
print('3.修改性别')
print('4.退出修改')
num = input('请输入您的操作序号:')
if num == '1':
i['name'] = input('请输入新的名字:')
print(self.l)
elif num == '2':
i['age'] = input('请输入新的年龄:')
print(self.l)
elif num == '3':
i['gender'] = input('请输入新的性别:')
print(self.l)
elif num == '4':
break
else:
print('序号有误,请重新输入')
A = True
if A == False:
print('查无此人,请重新输入')
def delete(self):
A = False
name = input('请输入您要删除的名字:')
for i in self.l:
if i.get('name') == name:
self.l.remove(i)
print(self.l)
A = True
break
if A == False:
print('查无此人,请重新输入')
def chakan(self):
print(self.l)
def main(self):
print("欢迎登录个人信息管理系统")
while True:
print('1.增加信息')
print('2.查找信息')
print('3.修改信息')
print('4.删除信息')
print('5.查看所有个人信息')
print('6.退出')
num = input('请输入您的操作序号:')
if num == '1':
self.add()
elif num == '2':
self.find()
elif num == '3':
self.xiugai()
elif num == '4':
self.delete()
elif num == '5':
self.chakan()
elif num == '6':
break
else:
print('输入有误,请重新输入')
if __name__ == '__main__':
cm = IdCard()
cm.main()
八、士兵突击
class Gun():#枪类
def __init__(self,name):
self.name = name
self.num = 0 #发子弹
def add_bullet(self,num):
self.num += num
def open_fire(self,diren):
self.num = self.num - 1
print('向%s开火,还剩%s发'%(diren.name,self.num))
diren.kill()
class sbl():#士兵类
def __init__(self,name,age,Gun):
self.name = name
self.age = age
self.Gun = Gun
self.hp = 100
def openfire(self,diren):
if self.Gun is not None:
self.Gun.open_fire(diren)
else:
print('没有枪')
def kill(self):
self.hp -= 10
if self.hp<=0:
print('挂了')
else:
print('还剩%s点血量'%self.hp)
ak47 = Gun('AK47')# 创建一把枪
m16 = Gun('m16')
ak47.add_bullet(50) #加50发子弹
xsd = sbl('许三多',24,ak47)
diren = sbl('敌人',21,m16)
xsd.openfire(diren) #向敌人开火
xsd.openfire(diren) #向敌人开火
xsd.openfire(diren) #向敌人开火
xsd.openfire(diren) #向敌人开火
xsd.openfire(diren) #向敌人开火
xsd.openfire(diren) #向敌人开火
xsd.openfire(diren) #向敌人开火
xsd.openfire(diren) #向敌人开火
xsd.openfire(diren) #向敌人开火
xsd.openfire(diren) #向敌人开火
class Wq(object):
def __init__(self,name):
self.name = name
class Feiji(Wq):
pass
def open_fire(self,dapao):
print('%s向%s开火'%(self.name,dapao.name))
class Dapao(Wq):
pass
feiji = Feiji('飞机')
dapao = Dapao('大炮')
feiji.open_fire(dapao)
九、植物大战僵尸
class zhiwu():
def __init__(self,name,jineng,jiage):
self.name = name
self.jineng = jineng
self.jiage = jiage
self.num = 0
def shengchang(self,num):
self.num +=num
print('向日葵生产了%s阳光,剩余%s阳光'%(num,self.num))
def sheji(self,juren):
print('向%s射击'%(juren.name))
juren.klii()
class jiangshi():
def __init__(self,name):
self.name = name
self.hp = 100
def klii(self):
self.hp -=10
if self.hp > 0:
print('还剩%s血量'%(self.hp))
else:
print('挂了')
Xrk = zhiwu('向日葵','生产阳光',50)
Wdss = zhiwu('豌豆射手','发射子弹',100)
juren = jiangshi('巨人僵尸')
Xrk.shengchang(20)
Xrk.shengchang(20)
Xrk.shengchang(20)
Wdss.sheji(juren)
Wdss.sheji(juren)
Wdss.sheji(juren)
Wdss.sheji(juren)
Wdss.sheji(juren)
Wdss.sheji(juren)
Wdss.sheji(juren)
Wdss.sheji(juren)
Wdss.sheji(juren)
Wdss.sheji(juren)
十、私有属性
属性和方法不能直接调用,就是私有属性
class dog():
def __init__(self):
self.name = '3月'
self.__age = 12 #私有属性
def show_age(self):
print(self.__age)
def set__age(self,age): #利用公有方法给私有属性赋值
if age > 0:
self.__age = age
def get__age(self):
return self.__age
gou = dog()
# gou.name = '哈士奇'
# dog.__age = 13 #公有属性
print(gou.name)
gou.set__age(21)
print(gou.get__age())
十一、私有方法
私有方法可以避免直接被调用,也影响字类调用
class tianmao:
def __buy(self):
return '购买成功'
def cheak_money(self,num):
if num < 100:
print('购买不了')
else:
return self.__buy()
t = tianmao()
print(t.cheak_money(200))
# print(t.__buy) 私有方法不能直接调用
十二、类属性
类属性就是全局变量
class dog():
count = 0 #类属性
__count = 0 #私有类属性
def __init__(self,name):
self.name = name #实列属性
dog.count +=1
dog.__count += 1
self.__age = 12 #私有实列属性
def get_age(self):
return self.__age
Dog = dog('哈士奇')
print(Dog.name)
Dog = dog('哈士奇')
print(Dog.name)
Dog = dog('哈士奇')
print(Dog.name)
Dog = dog('哈士奇')
print(Dog.name)
print(dog.count)
print(dog.__count)
'''
实列属性:对象的属性
类属性:定义的属性,有全局的定义
私有实列属性:不想让外部直接访问,不想让外部访问,可以把属性定于私有的
私有类属性:不想让外部直接访问,不想让外部访问,可以把属性定于私有的
'''
十三、面向对象三大特性
十四、继承案例
#教学老师
class teacher(object): #父类
def __init__(self,name,age):
self.name = name
self.age = age
#规定了字类所拥有的功能,具体的还是看字类
def eat(self):
print('可以吃饭')
def play(self):
print('可以教人')
class basketball_teacher(teacher): #继承父类
def play(self): #继承重写
print('可以教人打篮球')
def eat(self): #继承重写
print('%s可以吃大米饭'%self.name)
class football_teacher(teacher):
def eat(self): #继承重写
print('%s可以吃炒饭'%self.name)
def sleep(self):
print('可以睡觉')
def play(self): #继承重写
print('可以教人踢足球')
laoshi = basketball_teacher('胡见',23)
laoshi.eat()
laoshi.play()
jiaolian = football_teacher('喻喻',21)
jiaolian.eat()
jiaolian.play()
#手机
class Call(object):
def __init__(self,xinghao,color):
self.xinghao = xinghao
self.color = color
def ddh(self,name):
print('{}的{}可以{}打电话'.format(self.color,self.xinghao,name))
def show(self):
if isinstance(self,Huawei): #isinstance()判断一个对象是否是属于某个类,语法是 isinstance(对象,类)
print('我的型号是%s,我的颜色是%s,我的大小是%s' % (self.xinghao, self.color, self.size))
else:
print('我的型号是%s,我的颜色是%s'%(self.xinghao,self.color))
class Huawei(Call):
def __init__(self,xinghao,color,size):
super().__init__(xinghao,color)
self.size = size
def movie(self):
print('%s可以看视频'%self.xinghao)
class Pingguo(Call):
def play_game(self):
print('{}可以玩游戏'.format(self.xinghao))
call = Huawei('华为','亮黑色',30)
pingguo = Pingguo('苹果','白色')
call.ddh('胡豆')
call.movie()
call.show()
pingguo.ddh('喻豌豆')
pingguo.play_game()
pingguo.show()
'''
树
苹果树
桃树
香樟树
'''
class Tree(object):
def __init__(self,name,color):
self.name = name
self.color = color
def kaihua(self):
print('{}可以开花'.format(self.name))
def show(self):
if isinstance(self,Apple):
print('我的名字是%s,我的颜色是%s,我的高度是%s米'%(self.name,self.color,self.height))
else:
print('我的名字是%s,我的颜色是%s' % (self.name, self.color))
def jieguo(self):
print('树可以结果子')
class Apple(Tree):
def __init__(self,name,color,height):
self.height = height
super().__init__(name,color)
class Taoshu(Apple):
pass
def jieguo(self):
print('%s可以结桃子'%self.name)
class Xiangzhangshu(Tree):
pass
apple = Apple('苹果树','绿色',23)
apple.show()
apple.jieguo()
taoshu = Taoshu('桃树','红色',41)
taoshu.show()
taoshu.kaihua()
taoshu.jieguo()
xiangzhangshu = Xiangzhangshu('香樟树',"蓝色")
xiangzhangshu.show()
十五、单列模式
不管创建多少个对象,我们在内存中只有唯一的一个对象
代码如下(示例):
class Eath(object):
__instance = None #定义一个类的属性作判断
def __new__(cls, name, age):
if cls.__instance == None:
cls.__instance = object.__new__(cls)
return cls.__instance
a = Eath("地球",214)
b = Eath("火星",12)
print(id(a))
print(id(b))
a.age = 100
print(b.age)