第九天
程序员文章站
2022-06-08 17:52:21
...
**面向对象编程**
面向对象编程(Object-oriented-programming 缩写:OOP)是一种编程理念,这种编程理念更符合人们逻辑,使用面向对象编程可以提高开发速度和代码的重用率。
面向对象简单说就是把一个集合里的元素相同性质提取出来,提取出的性质合成一个类,用类去定义对象,对象便可拥有这些属性。
类:是对一群具有相同特征或者行为事物的统称,是抽象。
对象:是由类创造出来的具体实体,可以引用类里的属性,也可添加自己的属性。
同一类的对象具有相同的属性和方法,但属性和id不一样,对象实现了属性和方法的封装,是一种数据抽象。
创建类于对象:
class stduent():#建立一个类
def fun_one(self):#self表示对象自身,与调用的对象地址一样
print("该睡觉了")
def fun_two(self):
print("该起床了")
x=stduent()#创建一个对象
x.fun_one()#对象引用类里的方法
x.fun_two()
结果
该睡觉了
该起床了
在类的外部增加对象的属性:
class stduent():#建立一个类
def fun_one(self):
print("该睡觉了")
def fun_two(self):
print("该起床了")
def fun_thr(self):
print(self.name,self.age)
x=stduent()#创建一个对象
x.name="张三"
x.age=18
x.fun_thr()
结果
张三 18
在类内部使用__init__()方法对属性进行初始化:
class stduent():#建立一个类
def __init__(self,name,age):#初始化
self.name=name
self.age=age
def fun_one(self):
print(self.name,self.age)
x=stduent("张三",18)#创建一个对象,传入初始化的值
x.fun_one()
结果
张三 18
当类属性与对象属性重名时,对象.名字 先找对象属性里是否有此属性,没有再到类属性里找
class Tfun():
count=0#类属性(对象里共同拥有的相同属性)
def __init__(self,name):
self.name=name#对象的独特属性
Tfun.count+=1
def fun(self):
print(self.name)
print(Tfun.count)
x=Tfun("张")
x.fun()
print(Tfun.count)
x.count=x.count+5
print(x.count)
print(Tfun.count)
del x.count
print(x.count)
结果
0
张三
1
6
1
1
类的静态方法:
@staticmethod
通过类直接调用,不需要创建对象,不会隐式传递self
类的类方法
@classmethod
传入的是class,传入的值是class里定义的属性
class Stduent():
count=0
def __init__(self,name,age):
self.name=name
self.age=age
def fun_(self):#对象方法,参数是对象
print(self.name,self.age)
@classmethod
def fun(cls):#类方法,参数是类
print(cls.count)
@staticmethod
def fun_one():
print("你是个傻蛋")
x=Stduent("张","18")
x.fun_()
Stduent.fun()
Stduent.fun_one()
结果
张 18
0
你是个傻蛋
今日作业
class running():
def __init__(self,name,wight):
self.name=name
self.wight=wight
def fun_one(self):
print(self.name,"体重",self.wight,"公斤")
def fun_two(self):
print("{}每次奔跑会减肥{}公斤".format(self.name,self.cut))
def fun_thr(self):
print("{}每次吃东西体重会增加{}公斤".format(self.name,self.add))
x=running("张三",75.0)
x.fun_one()
x.cut=0.1
x.add=0.5
x.fun_two()
x.fun_thr()
结果
张三 体重 75.0 公斤
张三每次奔跑会减肥0.1公斤
张三每次吃东西体重会增加0.5公斤
class Gun():
count=0
def __init__(self,gunname):
self.gunneme=gunname
def fun_1(self):
if Gun.count>0:
return True
else:
return False
def fun_2(self):
print("{}能够发射子弹".format(self.gunneme))
def fun_3(self):
Gun.count = int(input("请输入子弹数量:"))
print("填装完毕")
class Peo():
def __init__(self,name,gun):
self.name=name
self.gun=gun
def fun_one(self):
print("由于{}没子弹,当前{}不能开火".format(self.gun,self.name))
def fun_two(self):
print("开火")
Gun.count=0
x=Peo("麦克","M99")
y=Gun(x.gun)
while True:
if y.fun_1():
y.fun_2()
x.fun_two()
else:
x.fun_one()
y.fun_3()
部分结果
由于M99没子弹,当前麦克不能开火
请输入子弹数量:100
填装完毕
M99能够发射子弹
开火
由于M99没子弹,当前麦克不能开火
class Fun():
def __init__(self,name):
self.name=name
def fun_1(self):
print("玩家{}历史记录".format(self.name))
@classmethod
def fun_one(cls):
print("小心怪物吞掉你")
@staticmethod
def fun_two():
print("游戏开始")
x=Fun("张三")
x.fun_1()
Fun.fun_one()
x.fun_two()
结果
玩家张三历史记录
小心怪物吞掉你
游戏开始