面向对象
class Func:def a1(self,name,age):print("我是{}今年{}岁了".format(name,age))def a2(self,home,price):print("我家在{}有{}钱".format(home,price))
obj=Func()
obj.a1("杨振浩",19)
obj.a2("河南",100)
#一般传递的参数多,且类中的函数功能类似时,使用class类
class Func:def __init__(self,name,age,home,price):self.name=nameself.age=ageself.home=homeself.price=pricedef a1(self):print("我是{}今年{}岁了".format(self.name,self.age))def a2(self):print("我家在{}有{}钱".format(self.home,self.price))
obj=Func("杨振浩",19,"河南",100)
obj.a1()
obj.a2()
数据的封装
data_list=[]
while True:name=input("输入姓名:")if name=='q':breakage=input("输入年龄:")#构建一个字典info={"name":name,"age":age}data_list.append(info)
print(data_list)
for item in data_list:print(item['name'])print(item['age'])
#封装1
class Func:def __init__(self,name,age):self.name=nameself.age=age
#data_list=[
# 对象(name="root",age=10)
# ]
data_list=[]
while True:name=input("输入姓名:")if name == 'q':breakage=input("输入年龄:")#创建对象info=Func(name,age)data_list.append(info)
print(data_list)
for item in data_list:print(item.name)print(item.age)#输入姓名:root
#输入年龄:123
#输入姓名:daidai
#输入年龄:1
#输入姓名:q
#[<__main__.Func object at 0x000001C0A00CE360>, <__main__.Func object at 0x000001C0A00CE3C0>]
#root
#123
#daidai
#1
#封装2
class Func:def __init__(self,name,age):self.name=nameself.age=agedef show(self):message="我的年龄是{},我今年{}岁了".format(self.name,self.age)print(message)
#data_list=[
#对象1(name="root",age=10)
#对象2(name="daidai",age=199)
# ]
data_list=[]
while True:name=input("输入姓名:")if name == 'q':breakage=input("输入年龄:")#创建对象info=Func(name,age)data_list.append(info)
print(data_list)
for item in data_list:item.show()
#输入姓名:root
#输入年龄:12
#输入姓名:daidai
#输入年龄:34
#输入姓名:q
#[<__main__.Func object at 0x00000278374AE510>, <__main__.Func object at 0x00000278374AE5A0>]
#我的年龄是root,我今年12岁了
#我的年龄是daidai,我今年34岁了
class Police:def __init__(self,name,blood):self.name=nameself.blood=blooddef catch(self,bad):#警察抓小偷self.blood=self.blood+100bad.blood=bad.blood-100print("{}抓住了小偷{},警察血量为{},小偷血量为{}".format(self.name,bad,self.blood,bad.blood))def smoking(self):self.blood=self.blood-50print("{}吸烟,警察血量为{}".format(self.name,self.blood))def shoot(self,bad):self.blood=self.blood+100bad.blood=bad.blood-200print("{}射击了小偷{},警察血量为{},小偷血量为{}".format(self.name,bad,self.blood,bad.blood))def __str__(self):return self.name
class Terriorist:def __init__(self,name,blood):self.name=nameself.blood=blooddef shoot(self,good):self.blood=self.blood+100good.blood=good.blood-200print("{}射击了警察{},小偷血量为{},警察血量为{}".format(self.name,good,self.blood,good.blood))def bomb(self,good):self.blood=self.blood-10good.blood=good.blood-100print("{}炸弹了警察{},小偷血量为{},警察血量为{}".format(self.name,good,self.blood,good.blood))def __str__(self):return self.name
p1=Police("警察1",1000)
p2=Police("警察2",1500)
t1=Terriorist("小偷1",1000)
t2=Terriorist("小偷2",800)
t3=Terriorist("小偷3",1200)
p1.shoot(t2)
p1.catch(t1)
p1.shoot(t2)
t2.bomb(p1)
#警察1射击了小偷小偷2,警察血量为1100,小偷血量为600
#警察1抓住了小偷小偷1,警察血量为1200,小偷血量为900
#警察1射击了小偷小偷2,警察血量为1300,小偷血量为400
#小偷2炸弹了警察警察1,小偷血量为390,警察血量为1200
三大特性
面向对象的三大特性
-
封装,将数据封装到对象中
-
继承,‘子承父业'
-
多态,python中默认支持多态
封装
#将数据封装到对象
class Func:def __init__(self,name,age):self.name=nameself.age=age
f1=Func("daidai",39)
f2=Func("root",23)
print(f1.name)
将同一类的函数封装到类的方法中
class Send:def weixin(self):passdef dingding(self):passdef mess(self):pass class Excel:def open(self):passdef read(self):passdef write(self):passdef close(self):pass
继承
class Send:def weixin(self):print("微信")
class Son(Send):def dingding(self):print("顶顶")
obj1=Son()
obj1.dingding()
obj1.weixin()
class Base:def weixin(self):print("father.微信")#次数的self等于obj1,Son,等于Son.dingding(),所以结果为son.顶顶(最后一行输出结果)self.dingding()def dingding(self):print("father.顶顶")
class Son(Base):def dingding(self):print("son.顶顶")
obj1=Son()
obj1.dingding()
obj1.weixin()
#son.顶顶
#father.微信
#son.顶顶
class Base:def weixin(self):print("father.微信")#此处的self为obj1,为Base(),等于Base.dingding(),所以此处为Base.dingding(),结果为faher.顶顶self.dingding()def dingding(self):print("father.顶顶")
class Son(Base):def dingding(self):print("son.顶顶")
obj1=Base()
obj1.dingding()
obj1.weixin()
#father.顶顶
#father.微信
#father.顶顶
class Base1:
def dingding(self):print("aaa")
class Base2:def dingding(self):print("bbb")
class Son(Base1,Base2):def a(self):print("ccc")
obj=Son()
obj.dingding()
#aaa
多态
#python中默认可以传递任何类型
def func(data):print(data)
obj=func(1123)
obj1=func("1123")
obj2=func(['sd','ad','d'])