欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第九天

程序员文章站 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()

结果

玩家张三历史记录
小心怪物吞掉你
游戏开始