python语法基础之面向对象1

面向对象和面向过程

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

类和对象

对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类

类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象。

总结:类就是创建对象的模板

类的构成

类的名称:类名
类的属性:一组数据
类的方法:允许对进行操作的方法 (行为)

"""定义一个类,需要使用关键字class,关键字后面的我们称之为类的名字
   类的后面还有一个括号,括号里面需要填写,这个类继承了哪个类
   如果没有继承,则可以不写,括号也可以删除
   默认情况下,python继承object这个类,这个类是所有类的基类
   命名一般用大驼峰法,另外,只要定义方法,使用self固定参数"""
class Cat():

    #定义方法
    def eat(self):
        print('猫爱吃鱼')
    def drink(self):
        print('猫喜欢喝可乐')
    def introduce(self):
        print('%s的年龄是%d'%(self.name,self.age))#改用self,对象谁调用就是谁自身


#创建一个对象
laomao=Cat()

#给对象添加属性
laomao.name='老猫'
laomao.age=12

#调用方法,不用传参数
laomao.eat()
laomao.drink()
laomao.introduce()

print('----------------------')

#再次创建一个对象
yyy=Cat()

#添加属性
yyy.name='ds'
yyy.age=11

#调用方法
yyy.eat()
yyy.drink()
yyy.introduce()

结果:

D:\Anaconda\python.exe E:/pythonwork/黑马/面向对象.py
猫爱吃鱼
猫喜欢喝可乐
老猫的年龄是12
----------------------
猫爱吃鱼
猫喜欢喝可乐
ds的年龄是11

Process finished with exit code 0

 self的注意点:

类里面的方法第一个参数的self可以叫做别的名字,但是行业规定都是叫做self,但是必须保证这个方法里面必须有一个参数,而且代表类本身的这个参数必须放在第一个参数的位置,后面的参数想怎么写就可以怎么写了。

还有就是在调用的时候,没有传递参数

 

__init__方法  和  __str__方法

总结:创建对象时会自动的调用__init__方法。

           当想打印对象的描述信息时,可以添加__str__方法,这时就会自动的调用__str__方法。

"""调用__init__方法"""
class Dog():
    #定义一个Dog类
    def __init__(self,new_name,new_age):
        self.name=new_name
        self.age=new_age
    def __str__(self):
        return '%s的年龄是%d'%(self.name,self.age)
    def eat(self):
        print('狗爱大骨头')
    def drink(self):
        print('狗爱喝水')
    def introduce(self):
        print('%s的年龄是%d'%(self.name,self.age))

#定义一个对象
dog=Dog('哈哈',20)
# dog.eat()
# dog.drink()
# dog.introduce()

print(dog)

结果:

D:\Anaconda\python.exe E:/pythonwork/黑马/面向对象.py
哈哈的年龄是20

Process finished with exit code 0

应用1:烤地瓜 

class SweetPotato:
    """定义了一个地瓜类"""
    def __init__(self):
        self.cookedString = "生的"
        self.cookedLevel = 0
        self.condiments = []#为了能够存储多个数据,往往在开发中让一个属性是列表

    def __str__(self):
        return "地瓜 状态:%s(%d),添加的作料有:%s"%(self.cookedString, self.cookedLevel, str(self.condiments))

    def cook(self, cooked_time):

        #因为这个方法被调用了多次,为了能够在一次调用这个方法的时候 能够 获取到上一次调用这个方法时的cooked_time
        #所以 需要在此,把cooked_time保存到这个对象的属性中,因为属性不会随着方法的调用而结束(一个方法被调用的时候
        #是可以用局部变量来保存数据的,但是当这个方法定义结束之后这个方法中的所有数据就没有了)
        self.cookedLevel += cooked_time

        if self.cookedLevel >=0 and self.cookedLevel<3:
            self.cookedString = "生的"
        elif self.cookedLevel >=3 and self.cookedLevel<5:
            self.cookedString = "半生不熟"
        elif self.cookedLevel >=5 and self.cookedLevel<8:
            self.cookedString = "熟了"
        elif self.cookedLevel>8:
            self.cookedString = "烤糊了"

    def addCondiments(self, item):
        #因为item这个变量指向了一个 作料,所以 接下来需要将item放到append里面
        self.condiments.append(item)


#创建了一个地瓜对象
di_gua = SweetPotato()
print(di_gua)

#开始烤地瓜
di_gua.cook(1)
print(di_gua)
di_gua.cook(1)
print(di_gua)
di_gua.addCondiments("大蒜")
di_gua.cook(1)
print(di_gua)
di_gua.cook(1)
di_gua.addCondiments("番茄酱")
print(di_gua)
di_gua.cook(1)
print(di_gua)
di_gua.cook(1)
di_gua.addCondiments("孜然")
print(di_gua)
di_gua.cook(1)
print(di_gua)
di_gua.addCondiments("芥末")
di_gua.cook(1)
print(di_gua)
di_gua.cook(1)
print(di_gua)
di_gua.cook(1)
print(di_gua)
di_gua.cook(1)
print(di_gua)

结果:

D:\Anaconda\python.exe "D:/黑马/python就业班上(剩余部分加微信VR365666)/01基础/第2节 python语法基础/07.面对对象-1/源码/10-烤地瓜.py"
地瓜 状态:生的(0),添加的作料有:[]
地瓜 状态:生的(1),添加的作料有:[]
地瓜 状态:生的(2),添加的作料有:[]
地瓜 状态:半生不熟(3),添加的作料有:['大蒜']
地瓜 状态:半生不熟(4),添加的作料有:['大蒜', '番茄酱']
地瓜 状态:熟了(5),添加的作料有:['大蒜', '番茄酱']
地瓜 状态:熟了(6),添加的作料有:['大蒜', '番茄酱', '孜然']
地瓜 状态:熟了(7),添加的作料有:['大蒜', '番茄酱', '孜然']
地瓜 状态:熟了(8),添加的作料有:['大蒜', '番茄酱', '孜然', '芥末']
地瓜 状态:烤糊了(9),添加的作料有:['大蒜', '番茄酱', '孜然', '芥末']
地瓜 状态:烤糊了(10),添加的作料有:['大蒜', '番茄酱', '孜然', '芥末']
地瓜 状态:烤糊了(11),添加的作料有:['大蒜', '番茄酱', '孜然', '芥末']

Process finished with exit code 0

应用二家具 

class Home:
    def __init__(self, new_area, new_info, new_addr):
        self.area = new_area
        self.info = new_info
        self.addr = new_addr
        self.left_area = new_area
        self.contain_items = []

    def __str__(self):
        msg = "房子的总面积是:%d,可用面积是:%d,户型是:%s,地址是:%s"%(self.area, self.left_area, self.info, self.addr)
        msg += " 当前房子里的物品有%s"%(str(self.contain_items))
        return msg

    def add_item(self, item):
        #self.left_area -= item.area
        #self.contain_items.append(item.name)

        self.left_area -= item.get_area()
        self.contain_items.append(item.get_name())

class Bed:
    def __init__(self, new_name, new_area):
        self.name = new_name
        self.area = new_area

    def __str__(self):
        return "%s占用的面积是:%d"%(self.name, self.area)

    def get_area(self):
        return self.area

    def get_name(self):
        return self.name

fangzi = Home(129, "三室一厅", "北京市 朝阳区 长安街 666号")
print(fangzi)


bed1 = Bed("席梦思", 4)
print(bed1)

fangzi.add_item(bed1)
print(fangzi)

bed2 = Bed("三人床",3)
fangzi.add_item(bed2)
print(fangzi)

结果:

D:\Anaconda\python.exe "D:/黑马/python就业班上(剩余部分加微信VR365666)/01基础/第2节 python语法基础/07.面对对象-1/源码/11-存放家具.py"
房子的总面积是:129,可用面积是:129,户型是:三室一厅,地址是:北京市 朝阳区 长安街 666号 当前房子里的物品有[]
席梦思占用的面积是:4
房子的总面积是:129,可用面积是:125,户型是:三室一厅,地址是:北京市 朝阳区 长安街 666号 当前房子里的物品有['席梦思']
房子的总面积是:129,可用面积是:122,户型是:三室一厅,地址是:北京市 朝阳区 长安街 666号 当前房子里的物品有['席梦思', '三人床']

Process finished with exit code 0

 

猜你喜欢

转载自blog.csdn.net/qq_35654080/article/details/84990268
今日推荐