Python基础学习009——类的封装

news/2024/11/8 15:06:47/
# 面向对象是一种编程思想,还有另一种是面向过程
# 面向过程,具体步骤的实现,所有功能都自己书写
# 面向对象,使用一个个工具(函数),帮助完成各项任务
# 类:对多个特性相同或相似的食物的统称,根据特征不同一个事物可以属于多个类
# 对象:由类实例化的一个事物,指代1个
# 类的组成:类名(大驼峰),属性即类的特征,方法即类要做什么事
# 类的抽象:找到类名,属性和方法
"""
1.定义类:定义前先设计类
2.创建对象:使用第一步定义的类创建对象
3.通过对象调用方法
"""# 定义类
class Person:def run(self):  # 方法的本质是在类中定义的函数,只不过要带一个self参数print("跑起来")print(id(self))# 创建对象Person()形式即可创建对象,只不过这样不能使用,需要一个变量把对象保存起来
# 变量 = 类名()形式,变量中保存的是对象的引用,可以说变量a就是对象A
# 一个类可以创建多个对象,每个对象的地址都不一样
xiaoming = Person()
# 调用对象
xiaoming.run()# self:从函数的语法上说,self是形参,可以是任意变量名,只不过习惯将它写作self
# self是普通形参,但调用的时候可以不传递实参值,不符合函数语法.
# 实际是Python解释器在调用这个方法的时候自动将调用这个方法的对象,即xiaoming,传递给self
# 所以self本质是一个对象.验证:self的引用和调用小明的引用一致
print(id(xiaoming))  # 此处结果与上一行调用时run方法结果一致# ------------------------------------------------------------
# 添加属性 对象.属性名 = 属性值
# 1.类内部添加:self.属性名 = 属性值,一般添加在_init_方法中
# 2.类外物添加:对象.属性名 = 属性值,一般不用# 获取属性:对象.属性名
# 1.类内部获取:self.属性名
# 2.类外部获取:对象.属性名,一般不使用class Cat:def eat(self):print(f'小猫{self.name}吃鱼')black_cat = Cat()
black_cat.name = '黑黑'  # 在外部添加属性
black_cat.eat()# --------------------------------------------------
# 魔法方法:以两个下划线开头,两个下划线结尾,在满足某个条件的情况下会自动调用class Dog:def __init__(self, n, a):self.name = nself.age = adef __str__(self):return f'今年{self.age}岁了'def show(self):print(f'小狗{self.name}')# 魔法方法在什么情况下自动调用
# 创建对象后自动调用
white_dog = Dog('巴顿', 2)  # 在这一步就已经调用了__init__
# 用在哪:给对象添加属性(初始化方法,构造方法).某行代码在每次创建对象后都要执行,就可以写在__init__中
# 注意事项:不要漏_,不要拼错名称init,如果init方法出了self之外的形参,必须传参
white = white_dog  # 没有创建对象,只是给对象一个别名,只有类名()形式才是创建对象
white.show()  # 别名与原名同样使用# ---------------------------------------------
# __str__方法:
# 什么情况下自动调用:使用print打印对象时,这个方法中一般书写对象的属性信息,
# 用在哪:即想要在对象打印时输出什么内容,就把对应内容写进这个函数默认输出对象的引用地址
# 注意事项:必须返回一个字符串
print(white_dog)# -------------------------------------------
# __del__:对象被销毁是自动调用(处理后事)
# 使用del删除对象,或者代码全部运行结束,声明周期到,销毁对象
# 如果对象有多个名字,即多个对象引用一个对象,需要把所有跟这个对象有关的名称都删除才行
class demo:def __init__(self, n):self.name = nprint('调用了init')def __del__(self):print(f"调用del,{self.name}要删除")a = demo('zhangsan')
b = demo('liso')
c = demo('adfs')
cc = c
del cc  # cc只是对象c的其中一个名称,只删除cc是不会调用__del__的,
print("此语句执行在删除adfs前")
del c  # 与对象c有关的名称全部被删除,则调用__del__销毁
print('此语句执行在删除adfs后')
del a  # 特意声明删除对象a,此时调用__del__销毁对象a
print("zhangsan销毁后")
print("代码结束,此句后销毁剩余未销毁的对象,即对象b")# ---------------------------------------------------------------------------------
class House:def __init__(self, House_type, House_area):self.House_type = House_type  # 房型self.House_area = House_area  # 总面积self.Last_area = House_area  # 剩余面积self.item_list = []  # 家具列表def __str__(self):return f'户型:{self.House_type}\n总面积:{self.House_area}\n剩余面积:{self.Last_area}\n家具:{self.item_list}'def add_item1(self, *args):for i in args:if self.Last_area > i.get('area'):self.item_list.append({'name': i.get('name'), 'area': i.get("area")})self.Last_area -= i.get('area')else:print('剩余面积不足')def add_item2(self, item):if self.Last_area > item.area:self.item_list.append({'name': item.name, 'area': item.area})self.Last_area -= item.areaelse:print('剩余面积不足')class Furniture:def __init__(self, name, area):self.name = nameself.area = areadef __str__(self):return f'家具:{self.name},占地面积:{self.area}'house1 = House('三室一厅', 100)
house1.add_item1({'name': '衣柜', 'area': 2}, {'name': '餐桌', 'area': 1.5})
print(house1)
bed = Furniture('席梦思', 4)
chest = Furniture('衣柜', 2)
table = Furniture('餐桌', 1.5)
house1.add_item2(bed)
print(house1)


http://www.ppmy.cn/news/1195567.html

相关文章

Android MVI架构的深入解析与对比

什么是MVI? M:model,此处的model并不是传统的数据模块,它是指用来存储视图状态UI State的一个模块 。比如请求数据时的loading、请求失败的提示页面等UI层面的变化状态。 V:view,视图模块 I:…

T1外部计数输入

/*----------------------------------------------- 内容&#xff1a;通过外部按键计数进入中断执行LED取反 ------------------------------------------------*/ #include<reg52.h> //包含头文件&#xff0c;一般情况不需要改动&#xff0c;头文件包含特殊功能寄存器的…

C++ STL 六组件介绍

文章目录 前言概念容器&#xff08;container&#xff09;概念类型代码示例作用&#xff08;为什么需要&#xff09; 算法&#xff08;algorithm&#xff09;概念类型代码示例作用&#xff08;为什么需要&#xff09; 迭代器&#xff08;iterator&#xff09;概念常用迭代器类型…

力控关节性能指标

力控关节是一种用于机器人的关节&#xff0c;具有强大的力控制能力&#xff0c;通常用于执行需要精确力量控制的任务&#xff0c;例如装配、协作操作、力导引操作等。 电机的伺服驱动器通常包括三种控制环——位置环、速度环和电流环。虽然每种控制环的目的是控制电机性能的不同…

Angular material Chips Autocomplete

Chips Autocomplete 官网的例子我没法正常使用&#xff0c;无法实现搜索 我的select是个通用组件&#xff0c;现在贴代码&#xff1a; component.ts import {Component,ElementRef,forwardRef,Input,OnChanges,OnDestroy,OnInit,SimpleChanges,ViewChild, } from angular/co…

点云从入门到精通技术详解100篇-基于 3D 激光雷达的车厢冻煤存量检测(续)

目录 3.2 点云数据校正(Point cloud data correction) 3.2.1 基于静态点云的倾斜校正 3.2.2 激光雷达运动畸变去除

【算法挑战】常数时间插入、删除和获取随机元素(含解析、源码)

380.常数时间插入、删除和获取随机元素 https://leetcode-cn.com/problems/insert-delete-getrandom-o1/ 题目描述 设计一个支持在平均 时间复杂度 O(1) 下&#xff0c;执行以下操作的数据结构。insert(val)&#xff1a;当元素 val 不存在时&#xff0c;向集合中插入该项。 …

在Node.js中,什么是中间件(middleware)?它们的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…