Python-基础篇-类与对象/面向对象程序设计-py脚本

面向对象基础

第一个面向对象

class Cat:def eat(self):print("小猫爱吃鱼")def drink(self):print("小猫要喝水")# 创建猫对象
tom = Cat()tom.eat()
tom.drink()print(tom)addr = id(tom)
print("%x" % addr)

新建两个猫对象

class Cat:def eat(self):print("小猫爱吃鱼")def drink(self):print("小猫要喝水")# 创建猫对象
tom = Cat()tom.eat()
tom.drink()print(tom)# 再创建一个猫对象
lazy_cat = Cat()lazy_cat.eat()
lazy_cat.drink()print(lazy_cat)lazy_cat2 = lazy_catprint(lazy_cat2)

设置对象属性

class Cat:def eat(self):# 哪一个对象调用的方法,self就是哪一个对象的引用print("%s 爱吃鱼" % self.name)def drink(self):print("%s 要喝水" % self.name)# 创建猫对象
tom = Cat()# 可以使用 .属性名 利用赋值语句就可以了
tom.name = "Tom"tom.eat()
tom.drink()print(tom)# 再创建一个猫对象
lazy_cat = Cat()lazy_cat.name = "大懒猫"lazy_cat.eat()
lazy_cat.drink()print(lazy_cat)

在外界设置属性的问题

class Cat:def eat(self):# 哪一个对象调用的方法,self就是哪一个对象的引用print("%s 爱吃鱼" % self.name)def drink(self):print("%s 要喝水" % self.name)# 创建猫对象
tom = Cat()# 可以使用 .属性名 利用赋值语句就可以了
# tom.name = "Tom"tom.eat()
tom.drink()
tom.name = "Tom"

初始化方法

class Cat:def __init__(self):print("这是一个初始化方法")# self.属性名 = 属性的初始值self.name = "Tom"def eat(self):print("%s 爱吃鱼" % self.name)# 使用类名()创建对象的时候,会自动调用初始化方法 __init__
tom = Cat()print(tom.name)

利用参数设置属性初始值


class Cat:def __init__(self, new_name):print("这是一个初始化方法")# self.属性名 = 属性的初始值# self.name = "Tom"self.name = new_namedef eat(self):print("%s 爱吃鱼" % self.name)# 使用类名()创建对象的时候,会自动调用初始化方法 __init__
tom = Cat("Tom")print(tom.name)lazy_cat = Cat("大懒猫")
lazy_cat.eat()

_del_方法

class Cat:def __init__(self, new_name):self.name = new_nameprint("%s 来了" % self.name)def __del__(self):print("%s 我去了" % self.name)# tom 是一个全局变量
tom = Cat("Tom")
print(tom.name)# del 关键字可以删除一个对象
del tomprint("-" * 50)

_str_方法

class Cat:def __init__(self, new_name):self.name = new_nameprint("%s 来了" % self.name)def __del__(self):print("%s 我去了" % self.name)def __str__(self):# 必须返回一个字符串return "我是小猫[%s]" % self.name# tom 是一个全局变量
tom = Cat("Tom")
print(tom)

小明爱跑步

class Person:def __init__(self, name, weight):# self.属性 = 形参self.name = nameself.weight = weightdef __str__(self):return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.weight)def run(self):print("%s 爱跑步,跑步锻炼身体" % self.name)self.weight -= 0.5def eat(self):print("%s 是吃货,吃完这顿再减肥" % self.name)self.weight += 1xiaoming = Person("小明", 75.0)xiaoming.run()
xiaoming.eat()print(xiaoming)
class Person:def __init__(self, name, weight):# self.属性 = 形参self.name = nameself.weight = weightdef __str__(self):return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.weight)def run(self):print("%s 爱跑步,跑步锻炼身体" % self.name)self.weight -= 0.5def eat(self):print("%s 是吃货,吃完这顿再减肥" % self.name)self.weight += 1xiaoming = Person("小明", 75.0)xiaoming.run()
xiaoming.eat()print(xiaoming)# 小美爱跑步
xiaomei = Person("小美", 45)xiaomei.eat()
xiaomei.run()print(xiaomei)
print(xiaoming)

摆放家具


class HouseItem:def __init__(self, name, area):self.name = nameself.area = areadef __str__(self):return "[%s] 占地 %.2f" % (self.name, self.area)# 1. 创建家具
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)print(bed)
print(chest)
print(table)

class HouseItem:def __init__(self, name, area):self.name = nameself.area = areadef __str__(self):return "[%s] 占地 %.2f" % (self.name, self.area)class House:def __init__(self, house_type, area):self.house_type = house_typeself.area = area# 剩余面积self.free_area = area# 家具名称列表self.item_list = []def __str__(self):# Python 能够自动的将一对括号内部的代码连接在一起return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"% (self.house_type, self.area,self.free_area, self.item_list))def add_item(self, item):print("要添加 %s" % item)# 1. 创建家具
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)print(bed)
print(chest)
print(table)# 2. 创建房子对象
my_home = House("两室一厅", 60)my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)print(my_home)
class HouseItem:def __init__(self, name, area):self.name = nameself.area = areadef __str__(self):return "[%s] 占地 %.2f" % (self.name, self.area)class House:def __init__(self, house_type, area):self.house_type = house_typeself.area = area# 剩余面积self.free_area = area# 家具名称列表self.item_list = []def __str__(self):# Python 能够自动的将一对括号内部的代码连接在一起return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"% (self.house_type, self.area,self.free_area, self.item_list))def add_item(self, item):print("要添加 %s" % item)# 1. 判断家具的面积if item.area > self.free_area:print("%s 的面积太大了,无法添加" % item.name)return# 2. 将家具的名称添加到列表中self.item_list.append(item.name)# 3. 计算剩余面积self.free_area -= item.area# 1. 创建家具
bed = HouseItem("席梦思", 40)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 20)print(bed)
print(chest)
print(table)# 2. 创建房子对象
my_home = House("两室一厅", 60)my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)print(my_home)

士兵突击

class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bullet_count = 0def add_bullet(self, count):self.bullet_count += countdef shoot(self):# 1. 判断子弹数量if self.bullet_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹,-1self.bullet_count -= 1# 3. 提示发射信息print("[%s] 突突突... [%d]" % (self.model, self.bullet_count))# 1. 创建枪对象
ak47 = Gun("AK47")ak47.add_bullet(50)
ak47.shoot()

私有属性和方法


class Women:def __init__(self, name):self.name = nameself.__age = 18def __secret(self):# 在对象的方法内部,是可以访问对象的私有属性的print("%s 的年龄是 %d" % (self.name, self.__age))xiaofang = Women("小芳")# 私有属性,在外界不能够被直接访问
# print(xiaofang.__age)
# 私有方法,同样不允许在外界直接访问
# xiaofang.__secret()
class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bullet_count = 0def add_bullet(self, count):self.bullet_count += countdef shoot(self):# 1. 判断子弹数量if self.bullet_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹,-1self.bullet_count -= 1# 3. 提示发射信息print("[%s] 突突突... [%d]" % (self.model, self.bullet_count))class Soldier:def __init__(self, name):# 1. 姓名self.name = name# 2. 枪 - 新兵没有枪self.gun = None# 1. 创建枪对象
ak47 = Gun("AK47")ak47.add_bullet(50)
ak47.shoot()# 2. 创建许三多
xusanduo = Soldier("许三多")xusanduo.gun = ak47print(xusanduo.gun)
class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bullet_count = 0def add_bullet(self, count):self.bullet_count += countdef shoot(self):# 1. 判断子弹数量if self.bullet_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹,-1self.bullet_count -= 1# 3. 提示发射信息print("[%s] 突突突... [%d]" % (self.model, self.bullet_count))class Soldier:def __init__(self, name):# 1. 姓名self.name = name# 2. 枪 - 新兵没有枪self.gun = Nonedef fire(self):# 1. 判断士兵是否有枪# if self.gun == None:if self.gun is None:print("[%s] 还没有枪..." % self.name)return# 2. 高喊口号print("冲啊...[%s]" % self.name)# 3. 让枪装填子弹self.gun.add_bullet(50)# 4. 让枪发射子弹self.gun.shoot()# 1. 创建枪对象
ak47 = Gun("AK47")# 2. 创建许三多
xusanduo = Soldier("许三多")xusanduo.gun = ak47
xusanduo.fire()print(xusanduo.gun)

伪私有属性和方法

class Women:def __init__(self, name):self.name = nameself.__age = 18def __secret(self):# 在对象的方法内部,是可以访问对象的私有属性的print("%s 的年龄是 %d" % (self.name, self.__age))xiaofang = Women("小芳")# 伪私有属性,在外界不能够被直接访问
print(xiaofang._Women__age)
# 伪私有方法,同样不允许在外界直接访问
xiaofang._Women__secret()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/243924.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dockerfile-xxxx

1、Dockerfile-server FROM openjdk:8-jdk-alpine WORKDIR /app COPY . . CMD java -Xms1536M -Xmx1536M -XX:UseG1GC -jar -Dlog4j2.formatMsgNoLookupstrue -Dloader.pathresources,lib -Duser.timezoneGMT-05 /app/server-main-1.0.0.jar 2、Dockerfile-bgd #FROM openjdk…

MySQL-SQL-DQL

DQL-介绍 DQL-语法 基本查询 1、查询多个字段 2、设置别名 3、去除重复记录 条件查询 1、语法 2、条件 聚合函数 1、介绍 2、常见的聚合函数 3、语法 分组查询 1、语法 2、where与having区别 排序查询 1、语法 2、排序方式 分页查询 1、语法 DQL-执行顺序

【代码随想录】刷题笔记Day54

前言 差单调栈就结束代码随想录一刷啦&#xff0c;回家二刷打算改用python补充进博客&#xff0c;小涛加油&#xff01;&#xff01;&#xff01; 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 双指针法 中心点外扩&#xff0c;注意中心点可能有一个元素可能有两个…

MacOS受欢迎的数据库开发工具 Navicat Premium 15 中文版

Navicat Premium 15 Mac是一款数据库管理工具&#xff0c;提供了一个全面的解决方案&#xff0c;用于连接、管理和维护各种数据库系统。以下是Navicat Premium 15 Mac的一些主要功能和特点&#xff1a; 软件下载&#xff1a;Navicat Premium 15 中文版下载 多平台支持&#xff…

PLC从HTTP服务端获取JSON文件,解析数据到寄存器

智能网关IGT-DSER集成了多种PLC协议&#xff0c;方便实现各种PLC与HTTP服务端之间通讯。通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址&#xff0c;配置URL&#xff0c;即可采用POST命令&#xff0c;将JSON文件提交给HTTP的服务端&#xff1b; 服务端有返回的JSON&…

从 Context 看 Go 设计模式:接口、封装和并发控制

文章目录 Context 的基本结构Context 的实现和传递机制为什么 Context 不直接传递指针案例&#xff1a;DataStore结论 在 Go 语言中&#xff0c; context 包是并发编程的核心&#xff0c;用于传递取消信号和请求范围的值。但其传值机制&#xff0c;特别是为什么不通过指针传递…

RTDETR 引入 UniRepLKNet:用于音频、视频、点云、时间序列和图像识别的通用感知大卷积神经网络 | DRepConv

大卷积神经网络(ConvNets)近来受到了广泛研究关注,但存在两个未解决且需要进一步研究的关键问题。1)现有大卷积神经网络的架构主要遵循传统ConvNets或变压器的设计原则,而针对大卷积神经网络的架构设计仍未得到解决。2)随着变压器在多个领域的主导地位,有待研究ConvNets…

Ubuntu Desktop 隐藏 / 显示文件和文件夹

Ubuntu Desktop 隐藏 / 显示文件和文件夹 1. GUI hot key2. Show hidden and backup filesReferences 1. GUI hot key Ctrl H: 隐藏 / 显示文件和文件夹 2. Show hidden and backup files Edit -> Preferences -> Views References [1] Yongqiang Cheng, https://yo…

【分布式技术】消息队列Kafka

目录 一、Kafka概述 二、消息队列Kafka的好处 三、消息队列Kafka的两种模式 四、Kafka 1、Kafka 定义 2、Kafka 简介 3、Kafka 的特性 五、Kafka的系统架构 六、实操部署Kafka集群 步骤一&#xff1a;在每一个zookeeper节点上完成kafka部署 ​编辑 步骤二&#xff1a…

【数据结构】 链栈的基本操作 (C语言版)

目录 一、链栈 1、链栈的定义&#xff1a; 2、链栈的优缺点&#xff1a; 二、链栈的基本操作算法&#xff08;C语言&#xff09; 1、宏定义 2、创建结构体 3、链栈的初始化 4、链栈的进栈 5、链栈的出栈 6、获取栈顶元素 7、栈的遍历输出 8、链栈的判空 9、求链…

一周时间,开发了一款封面图生成工具

介绍 这是一款封面图的制作工具&#xff0c;根据简单的配置即可生成一张好看的封面图&#xff0c;目前已有七款主题可以选择。做这个工具的初衷来自平时写文章&#xff0c;都为封面图发愁&#xff0c;去图片 网站上搜索很难找到满意的&#xff0c;而且当你要的图如果要搭配上文…

Eureka整合seata分布式事务

文章目录 一、分布式事务存在的问题二、分布式事务理论三、认识SeataSeata分布式事务解决方案1、XA模式2、AT模式3、SAGA模式4.SAGA模式优缺点&#xff1a;5.四种模式对比 四、微服务整合Seata AT案例Seata配置微服务整合2.1、父工程项目创建引入依赖 2.2、Eureka集群搭建2.3、…

02-编程猜谜游戏

上一篇&#xff1a;01-开始Rust之旅 本章通过演示如何在实际程序中使用 Rust&#xff0c;你将了解 let 、 match 、方法、关联函数、外部crate等基础知识。 本章将实现一个经典的初学者编程问题&#xff1a;猜谜游戏。 工作原理如下&#xff1a;程序将随机生成一个介于 1 和 10…

Qt —— 自定义飞机仪表控件(附源码)

示例效果 部署环境 本人亲测版本Vs2017+Qt5.12.4,其他版本应该也可使用。 源码1 qfi_ADI::qfi_ADI( QWidget *parent ) :QGraphicsView ( parent ),m_scene ( nullptr )

牛客周赛 Round 18 解题报告 | 珂学家 | 分类讨论计数 + 状态DP

前言 整体评价 前三题蛮简单的&#xff0c;T4是一个带状态的DP&#xff0c;这题如果用背包思路去解&#xff0c;不知道如何搞&#xff0c;感觉有点头痛。所以最后还是选择状态DP来求解。 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 A. 游游的整数翻转 这题最好…

.NET国产化改造探索(七)、更改大金仓数据库认证方式

随着时代的发展以及近年来信创工作和…废话就不多说了&#xff0c;这个系列就是为.NET遇到国产化需求的一个闭坑系列。接下来&#xff0c;看操作。 之前安装人大金仓数据库的时候&#xff0c;连接数据库所使用的加密方式选择的是scram-sm3&#xff0c;权限管理框架的ORM使用的…

k8s集群异常恢复

前提、我自己的k8s采用的是单master节点两个从节点部署&#xff0c;我针对单master情况进行恢复说明 场景一&#xff1a;正常开关虚拟机&#xff0c;可直接重启kubelet进行恢复 1、1、一般重启后三个节点都需要检查&#xff0c;输入命令检查kubelet&#xff1a; systemctl s…

Linux中普通用户如何使用sudo指令提升权限

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 普通用户为何无法使用sudo&#xff1f; 我们来看一下具体操作 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太阳&#xff0c;一种是正在努力…

电脑 wifi 常断

问题 电脑wifi网络经常断。 详细问题 笔者使用笔记本电脑&#xff0c;发现每过三五分钟&#xff0c;wifi便会自动断开。 解决方案 步骤1、搜索框搜索设备管理器。 步骤2、找到网络适配器并点击。 步骤2、找到网络适配器菜单中的Wireless相关内容&#xff0c;右键&#x…

springcloud +Vue 前后端分离的onlinejudge在线评测系统

功能描述&#xff1a; 本系统的研究内容主要是设计并实现一个一个在线测评系统&#xff08;OJ&#xff09;&#xff0c;该系统集成了博客、竞赛、刷题、教学&#xff0c;公告&#xff0c;个人管理六大功能&#xff0c;用户注册后登录系统&#xff0c;可以浏览本站的全部文章、发…