Python笔记11

案例实现

需求:小猫爱吃鱼,小猫要喝水
类名:猫类 Cat
属性:暂无
方法:吃鱼(eat)喝水(drink)
class Cat:
    def eat(self): # self自动出现,不用管
        print('小猫爱吃鱼...')

    def drink(self):
        print('小猫要喝水...')


# 2、创建对象
blue_cat = Cat()

# 3、通过对象调用类中的方法
blue_cat.eat() # 小猫爱吃鱼...
blue_cat.drink() # 小猫要喝水...

# 创建对象
black_cat =Cat()
black_cat.eat() # 小猫爱吃鱼...
black_cat.drink() # 小猫要喝水..
  • self的说明
   class Cat:
       def eat(self): # self自动出现,不用管
           print(f'{id(self)},self')
           print('小猫爱吃鱼...')
   
   
   # 2、创建对象
   blue_cat = Cat()
   print(f'{id(blue_cat)}, blue_cat')
   # 3、通过对象调用类中的方法
   blue_cat.eat()  # blue_cat 对象调用eat方法,解释器就会将blue_cat对象传给 self
   print('_'*30)
   # 创建对象
   black_cat =Cat()
   print(f'{id(black_cat)}, black_cat')
   black_cat.eat()  # black_cat对象调用eat方法,解释器就会将black_cat对象传给 self
1、函数的语法上讲,self是形参,就可以是任意的变量名,习惯上将这个形参写作self
2、self 是普通的形参,但是在调用的时候没有传递实参值,因为python解释器在执行代码的时候,自动的将调用这个方法的对象传递给了 self	,即self的本质是对象
3、验证,只需要确定,通过哪个对象调用,对象的引用和self 的引用是一样的
4、self 是函数中的局部变量,直接创建的对象是全局变量

对象的属性操作

添加属性

对象.属性名 = 属性值

  • 类内部添加
    在内部方法中,self是对象
    self.属性名 = 属性值
    在类中添加属性一般写作 __init__方法

  • 类外部添加
    对象.属性名 = 属性值 # 一般不使用

获取属性

对象.属性名

  • 类内部
    在内部方法中,self是对象
    self.属性名
  • 类外部
    对象.属性名 # 一般不使用
class Cat:
    def eat(self): # self自动出现,不用管
        print(f'{id(self)},self')
        print(f'小猫{self.name}爱吃鱼...')


# 2、创建对象
blue_cat = Cat()
print(f'{id(blue_cat)}, blue_cat')
# 给蓝猫添加 name属性
blue_cat.name = '蓝猫'
# 3、通过对象调用类中的方法
blue_cat.eat()  # blue_cat 对象调用eat方法,解释器就会将blue_cat对象传给 self
print('_'*30)
# 创建对象
black_cat =Cat()
black_cat.name = '黑猫'
print(f'{id(black_cat)}, black_cat')
black_cat.eat()  # black_cat对象调用eat方法,解释器就会将black_cat对象传给 self

__init__方法

1、什么情况下自动调用
创建对象之后会自动调用
2、有什么用,用在哪
1)给对象添加属性的(初始化方法,构造方法)
2)某些代码,在每次创建对象之后,都要执行,就可以将这行代码写在__init__方法
3、书写注意事项
如果init方法中,存在出了self之外的参数,在创建对象的时候必须传参

class Cat:
    # 定义添加属性的方法
    def __init__(self): # 这个方法是创建对象之后调用
        self.name = '蓝猫' # 给对象添加name属性
        self.age = 2 # 给对象添加age属性
        # 验证是否被调用
        print('我是__init__,我被调用了')

    # 输出属性信息
    def show_into(self):
        print(f'小猫的名字是{self.name},年龄是{self.age}')


# 创建对象,不要在自己类缩进中创建
# Cat() # 创建对象,会输出
blue_cat = Cat() # 创建对象,会输出

blue = blue_cat  # 不是创建对象,不会输出
blue.show_into()

# 创建黑猫
black_cat =Cat()   # 创建对象
black_cat.show_into()
class Cat:
    # 定义添加属性的方法
    def __init__(self,name,age): # 这个方法是创建对象之后调用
        self.name = name # 给对象添加name属性
        self.age = age # 给对象添加age属性

    # 输出属性信息
    def show_into(self):
        print(f'小猫的名字是{self.name},年龄是{self.age}')


# 创建对象,不要在自己类缩进中创建
# Cat() # 创建对象,会输出
blue_cat = Cat('蓝猫',2) # 创建对象,会输出

blue = blue_cat  # 不是创建对象,不会输出
blue.show_into()

# 创建黑猫
black_cat =Cat('黑猫',3)   # 创建对象
black_cat.show_into()

__str__方法

1、什么情况下自动调用
使用print(对象)打印对象的时候,会自动调用
2、有什么用,用在哪
1)在这个方法中一般书写对象的属性信息,即打印对象的时候想要查看什么信息,在这个方法中进行定义的
2)如果类中没有定义__str__方法,print(对象),默认输出对象的引用地址
3、书写注意事项
这个方法必须返回一个字符串

class Cat:
    # 定义添加属性的方法
    def __init__(self,name,age): # 这个方法是创建对象之后调用
        self.name = name # 给对象添加name属性
        self.age = age # 给对象添加age属性

    # 输出属性信息
    def show_into(self):
        print(f'小猫的名字是{self.name},年龄是{self.age}')

    def __str__(self):
         # 必须返回一个字符串 ,只要是字符串就行
        return f'小猫的名字是{self.name},年龄是{self.age}'


# 创建对象,不要在自己类缩进中创建
# Cat() # 创建对象,会输出
blue_cat = Cat('蓝猫',2) # 创建对象,会输出
print(blue_cat)

# 创建黑猫
black_cat =Cat('黑猫',3)   # 创建对象
print(black_cat)

__del__方法

__init__方法,创建对象之后,会自动调用 (构造方法)
__del__方法,对象被删除销毁时,会自动调用的(处理后事)(析构方法)
1、调用场景,程序代码运行结束,所有对象都被销毁
2、调用场景,直接使用del删除对象(如果对象有多个名字(多个对象引用一个对象),需要把所有的对象都删除才行)

class Demo:
    def __init__(self,name):
        print('我是__init__,我被调用了')
        self.name = name

    def __del__(self):
        print(f'{self.name}没了,给它处理后事...')


# Demo('a') # a没了,给它处理后事...
a=Demo('a') # a没了,给它处理后事...
b=Demo('b') # b没了,给它处理后事...
del a # 删除销毁,对象    程序未运行结束,先销毁,处理a,再打印运行代码结束,最后是b
print('代码运行结束') # 先执行代码运行结束,才会执行a,b

'''
代码运行结束
a没了,给它处理后事...
b没了,给它处理后事...


# 加了del a

a没了,给它处理后事...
代码运行结束
b没了,给它处理后事...
'''

案例

  • 需求1:
    1、小明体重75.0公斤
    2、小明每次跑步会减肥0.5公斤
    3、小明每次吃东西体重增加1公斤
类名:人类 Person
属性:姓名 name,体重 weight
方法:
	跑步 run
	吃东西 eat
	添加属性 __init__
	属性信息 __str__
class Person:
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight

    def __str__(self):
        return f"姓名:{self.name},体重:{self.weight}kg"

    def run(self):
        print(f"{self.name}跑步5km,体重减少了")
        # 减体重,即修改属性
        self.weight -= 0.5

    def eat(self):
        print(f"{self.name}吃了1次东西,体重增加了")
        # 修改体重
        self.weight +=1

xm = Person('小明',75.0)
print(xm)
xm.run()
print(xm)
xm.eat()
print(xm)
  • 需求2
    1、房子(House)有户型、总面积和家具名称列表
    新房子没有任何的家具
    2、家具(Houseltem)有名字和占地面积,其中
    席梦思(bed)占地4平米
    衣柜(chest)占地2平米
    餐桌(table)占地1.5平米
    3、将以上三件家具添加到房子中
    4、打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表

    剩余面积
    1、在创建房子对象时,定义一个剩余面积的属性,初始值和总面积相等
    2、当调用add_item方法,向房间添加家具时,让剩余面积 -=家具面积

类名:房子类 House
属性:户型 name ,总面积 total_area,剩余面积 free_area = total_area
	家具名称列表 item_list = []
方法:__init__ ,__str__
添加家具方法:
	def add_item(self,item): #  
		先判断房子的剩余面积和总面积的关系
			修改房子的剩余面积
			修改房子的家具名称列表


类名:家具类 HouseItem
属性:户型 name ,总面积 area
方法:__init__ ,__str__
# 定义家具类
class HouseItem:
    def __init__(self, name, area):
        self.name =name
        self.area = area
    def __str__(self):
        return f"家具名字{self.name},占地面积{self.area}平米"


# 定义房子类
class House:
    def __init__(self,name,area):
        self.name=name # 户型
        self.total_area = area # 总面积
        self.fre_area = area # 剩余面积
        self.item_list=[] # 家具名称的列表

    def __str__(self):
        return f"户型:{self.name},总面积:{self.total_area},剩余面积:{self.total_area}平米,家具名称列表:{self.item_list}"

    def add_item(self, item):
        # 先判断房子的剩余面积(self.free_area)和家具的占地面积(item.area)的关系
        # self 表示的 房子的对象,缺少一个家具对象使用传参解决
        if self.fre_area > item.area:
            # 添加数据
            self.item_list.append(item.name)
            # 修改房子的剩余面积
            self.fre_area-=item.area
            print(f"{item.name} 添加成功")
        else:
            print('剩余面积不足,换个大房子吧')
        # 修改房子的家具名称列表

# 创建家具对象
bed = HouseItem('席梦思',4)
chest = HouseItem('衣柜',2)
table = HouseItem('餐桌',1.5)
print(bed)
print(chest)
print(table)

# 创建房子对象
house = House('三室一厅',150)
print(house)

# 添加 床
house.add_item(bed)
print(house)
  • 需求3
类名:学生类 Student
属性:姓名 name,年龄age
方法:吃饭 eat,睡觉 sleep, 过年 year ,__str__ ,__init__
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"姓名:{self.name},年龄:{self.age}岁"

    def eat(self):
        print(f"{self.name}要吃饭")

    def sleep(self):
        print(f"{self.name}要睡觉")

    def year(self):
        self.age+=1


xm = Student('小明',18)
xh = Student('小红',17)
print(xm)
print(xh)
xm.eat()
xm.sleep()
xm.year()
print(xm)
xh.eat()
xh.sleep()
xh.year()
print(xh)
  • 需求4
class computer:
    def __init__(self,brand,price):
        self.brand =brand
        self.price =price

    def play_movie(self,movie):
       print(f"{self.brand}播放电影 {movie}")

mi = computer('小米',1000)
mac = computer('mac',2000)
mi.play_movie('葫芦娃')
mac.play_movie('变形金刚')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值