当前位置: 首页 > news >正文

python --- 类与对象(二)

类属性与方法

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

类的方法

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。

self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self。

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods。

实例

类的私有属性实例如下:

class Person:name = ''__nickname = ''def __init__(self, name, nickname):self.name = nameself.__nickname = nicknamedef say_hello(self):print("你好,我叫:" + self.name + ",我的外号是:" + self.__nickname)person = Person('张三', '狗剩子')
person.say_hello()
print("大名叫:" + person.name)
# 报错,私有属性不能在类外部使用
print("外号叫:" + person.__nickname)

执行以上程序输出结果为:

Traceback (most recent call last):
你好,我叫:张三,我的外号是:狗剩子File "F:/Python教程/project2/com/bjsxt/mypy/面向对象-对象.py", line 191, in <module>
大名叫:张三print("外号叫:" + person.__nickname)
AttributeError: 'Person' object has no attribute '__nickname'

类的私有方法实例如下:

class Person:name = ''__nickname = ''def __init__(self, name, nickname):self.name = nameself.__nickname = nicknamedef say_hello(self):print("你好,我叫:" + self.name + ",我的外号是:" + self.__nickname)def __say_hello(self):return self.__nicknamedef say_hello2(self):print(self.__nickname)person = Person('张三', '狗剩子')
person.say_hello()
print("大名叫:" + person.name)
# 报错,私有属性不能在类外部使用
# print("外号叫:" + person.__nickname)
person.say_hello2()
# 报错,不允许在类外部调用私有方法
person.__say_hello()

以上实例执行结果:

Traceback (most recent call last):File "F:/Python教程/project2/com/bjsxt/mypy/面向对象-对象.py", line 219, in <module>person.__say_hello()
你好,我叫:张三,我的外号是:狗剩子
AttributeError: 'Person' object has no attribute '__say_hello'
大名叫:张三
狗剩子

类的专有方法:

__init__ : 构造函数,在生成对象时调用

__del__ : 析构函数,释放对象时使用

__add__: 加运算

__sub__: 减运算

__mul__: 乘运算

__truediv__: 除运算

__mod__: 求余运算

__pow__: 乘方

class User:def __new__(cls, *args, **kwargs):"""如果 __new__方法不返回值(或者说返回 None)__init__ 将不会得到调用因为实例对象都没创建出来,调用 init 也没什么意义。:param args::param kwargs::return:"""print("调用了__new__方法")# 返回一个实例对象,这个实例对象会传递给 __init__ 方法中定义的 self 参数# 以便实例对象可以被正确地初始化。return super(User, cls).__new__(cls)def __init__(self, age, name):"""python 规定,__init__只能返回 None 值__init__方法中除了self之外定义的参数,都将与 __new__方法中除cls参数之外的参数是必须保持一致或者等效。"""self.name = nameself.age = ageprint("生成对象时调用")def __del__(self):print("析构函数,释放对象时调用")def showparams(self):print(self.__dict__)user = User(age=25, name='张三')

输出结果:

调用了__new__方法
生成对象时调用
析构函数,释放对象时调用

运算符重载

Python同样支持运算符重载,我们可以对类的专有方法进行重载,实例如下:

class Vector:xpos = 0ypos = 0def __init__(self, xpos, ypos):self.xpos = xposself.ypos = yposdef __add__(self, other):return Vector(self.xpos + other.xpos, self.ypos + other.ypos)def __str__(self):return "横坐标:" + str(self.xpos) + ";纵坐标:" + str(self.ypos)def __sub__(self, other):return Vector(self.xpos - other.xpos, self.ypos - other.ypos)def __mul__(self, other):return Vector(self.xpos * other.xpos, self.ypos * other.ypos)def __truediv__(self, other):return Vector(self.xpos / other.xpos, self.ypos / other.ypos)def __mod__(self, other):return Vector(self.xpos % other.xpos, self.ypos % other.ypos)def __pow__(self, power, modulo=None):return Vector(self.xpos ** power, self.ypos ** power)v1 = Vector(1, 3)
v2 = Vector(4, 5)v = v1 + v2
print(v)v = v1 - v2
print(v)v = v1 * v2
print(v)v = v1 / v2
print(v)v = v1 % v2
print(v)v = v1 ** 2
print(v)

以上代码执行结果如下所示:

横坐标:5;纵坐标:8
横坐标:-3;纵坐标:-2
横坐标:4;纵坐标:15
横坐标:0.25;纵坐标:0.6
横坐标:1;纵坐标:3
横坐标:1;纵坐标:9

相关文章:

python --- 类与对象(二)

类属性与方法 类的私有属性 __private_attrs&#xff1a;两个下划线开头&#xff0c;声明该属性为私有&#xff0c;不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。 类的方法 在类的内部&#xff0c;使用 def 关键字来定义一个方法&#xf…...

任正非说:华为以前还出现过可笑的工号文化,看官大官小的指令

你好&#xff01;这是华研荟【任正非说】系列的第33篇文章&#xff0c;让我们聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 一、要把可以规范化的管理都变成扳铁路道岔&#xff0c;使岗位操作标准化、制度化。 来源于任正非先生2003年的讲话《在理性与…...

用Python舞动数据的魔力:探索数据分析的艺术之路

用Python舞动数据的魔力&#xff1a;探索数据分析的艺术之路 前言什么是Python数据分析Python介绍数据分析介绍Python和数据分析的关系 python数据分析的作用金融领域社交媒体领域电子商务领域医疗领域物流和供应链管理领域 Python数据分析教材 前言 打开招聘网站&#xff0c;…...

iOS 让界面元素的文字随着语言的更改而变化——本地化文字跟随

在我的 App 内置的设置中&#xff0c;修改了语言&#xff0c;这时需要让当前界面的文本跟着改变语言。 解决方法是&#xff1a;添加一个观察者&#xff0c;观察 localize 本地语言的通知&#xff0c;然后一有变化就调用自定义的方法执行操作。&#xff08;而设置中其实是改变了…...

Xcode15更新内容

参考博客&#xff1a; 【WWDC 2023】Xcode 15 更新内容 文章目录 1. xcode15起&#xff0c;项目内创建的图片可以使用点语法访问2.2. UIKit项目也可以使用预览功能3. Xcode新增标签功能4.Log分类 1. xcode15起&#xff0c;项目内创建的图片可以使用点语法访问 2.2. UIKit项目也…...

【数据集标注制作】视频剪切标注1——类DarkLabel软件

视频标注 用于从视频中标注数据&#xff0c;用于YOLO网络的目标检测。旨在实现单次鼠标标注能生成多张被标注图像&#xff0c;实现数据集快速制作&#xff01; 从视频中&#xff0c;通过鼠标框选指定区域&#xff0c;形成掩码box鼠标选定区域后&#xff0c;根据设定的成像尺寸…...

一体化HIS医疗信息管理系统源码:云HIS、云电子病历、云LIS

基于云计算技术的B/S架构的HIS系统&#xff0c;为医疗机构提供标准化的、信息化的、可共享的医疗信息管理系统&#xff0c;实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。系统利用云计算平台的技术优势&#xff0c;建立统一的云HIS、云病历、云LIS&#xff0c;…...

NSSCTF逆向题解

[SWPUCTF 2021 新生赛]简简单单的逻辑 直接把key打印出来&#xff0c;然后整理一下result&#xff0c;让key和result进行异或 key[242,168,247,147,87,203,51,248,17,69,162,120,196,150,193,154,145,8] data[0xbc,0xfb,0xa4,0xd0,0x03,0x8d,0x48,0xbd,0x4b,0x00,0xf8,0x27,0x…...

广域网加速的作用:企业为什么需要广域网加速?

由于局域网与广域网之间巨大的带宽鸿沟&#xff0c;通过增加带宽来满足膨胀的流量需求是不切实际的。 并且广域网带宽成本较高&#xff0c;增加广域网带宽对任何企业都意味着巨大的成本负担。这些使得控制 管理广域网带宽使用成为必需。 企业为什么要加速广域网? 对重要的企…...

SQL SERVER Inregration Services-OLE DB、Oracle和ODBC操作

OLE DB链接器 OLE DB插件下载&#xff1a;https://learn.microsoft.com/zh-cn/sql/connect/oledb/download-oledb-driver-for-sql-server?viewsql-server-ver16 配置OLE DB Connection Manager 在点击“新建”时&#xff0c;会弹出警告信息“不支持指定的提供程序&#xff0…...

尚硅谷大数据项目《在线教育之实时数仓》笔记006

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第9章 数仓开发之DWD层 P041 P042 P043 P044 P045 P046 P047 P048 P049 P050 P051 P052 第9章 数仓开发之DWD层 P041 9.3 流量域用户跳出事务事实表 P042 DwdTrafficUserJum…...

Linux-源码安装go

使用go 1.14 版本 #wget https://golang.org/dl/go1.14.15.linux-amd64.tar.gz #tar zxvf go1.14.15.linux-amd64.tar.gz #mv go /usr/local/ #vim /etc/profile export GOROOT/usr/local/go export GOBIN$GOROOT/bin export GOPKG$GOROOT/pkg/tool/linux_amd64 export GO…...

如何检测小红书账号是否被限流?哪些原因会导致账号被限流?

hi&#xff0c;同学们&#xff0c;本期是第5期AI运营技巧篇&#xff0c;文章底部准备了粉丝福利&#xff0c;看完后可领取&#xff01; 最近好多新手学员运营小红书账号&#xff0c;可能会遇到这样的问题&#xff1a;发布的内容小眼睛少得可怜&#xff1f;搜索不到自己的笔记&…...

[动态规划] (十三) 简单多状态 LeetCode 740.删除并获得点数

[动态规划] (十三) 简单多状态: LeetCode 740.删除并获得点数 文章目录 [动态规划] (十三) 简单多状态: LeetCode 740.删除并获得点数题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值 代码实现总结 740. 删除并获得点数 题目解析 (1) 给定一个整数数组。 (2) 选…...

【K-means聚类算法】实现鸢尾花聚类

文章目录 前言一、数据集介绍二、使用步骤1.导包1.2加载数据集1.3绘制二维数据分布图1.4实例化K-means类&#xff0c;并且定义训练函数1.5训练1.6可视化展示2.聚类算法2.1.可视化生成3其他聚类算法进行鸢尾花分类 前言 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器…...

什么是代理IP池?如何判断IP池优劣?

代理池充当多个代理服务器的存储库&#xff0c;提供在线安全和匿名层。代理池允许用户抓取数据、访问受限制的内容以及执行其他在线任务&#xff0c;而无需担心被检测或阻止的风险。代理池为各种在线活动&#xff08;例如网页抓取、安全浏览等&#xff09;提高后勤保障。 读完…...

【面经】讲一下线程池的参数和运行原理

线程池是Java中一种重要的并发工具&#xff0c;它可以帮助我们更好地管理线程&#xff0c;避免线程过多导致的系统开销和性能问题。线程池通过预先创建一定数量的线程&#xff0c;并将任务提交给这些线程执行&#xff0c;从而避免了频繁创建和销毁线程的开销。 线程池的参数主…...

针对图像分类的数据增强方法,离线增强,适合分类,无标签增强

针对图像分类的数据增强方法&#xff0c;离线增强&#xff0c;适合分类&#xff0c;无标签增强 代码&#xff1a; 改变路径即可使用 # 本代码主要提供一些针对图像分类的数据增强方法# 1、平移。在图像平面上对图像以一定方式进行平移。 # 2、翻转图像。沿着水平或者垂直方向…...

润色论文Prompt

你好&#xff0c;我现在开始写论文了&#xff0c;我希望你可以扮演帮我润色论文的角色我写的论文是关于xxxxx领域的xxxxx&#xff0c;我希望你能帮我检查段落中语句的逻辑、语法和拼写等问题我希望你能帮我检查以下段落中语句的逻辑、语法和拼写等问题同时提供润色版本以符合学…...

配置简单VLAN

1、 需求 &#xff1a; 1&#xff09;创建VLAN 10、20、30 2&#xff09;将端口加入VLAN 3&#xff09;查看VLAN信息 2、方案 使用eNSP搭建实验环境&#xff0c;如图所示。 3、步骤 实现此案例需要按照如下步骤进行。 1&#xff09;交换机创建VLAN 10、20、30 [sw1]vla…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 &#x1f50d; 若用递归计算每一项&#xff0c;会发生什么&#xff1f; Horners Rule&#xff08;霍纳法则&#xff09; 第一步&#xff1a;我们从最原始的泰勒公式出发 第二步&#xff1a;从形式上重新观察展开式 &#x1f31f; 第三步&#xff1a;引出霍纳法则&…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...