Python——类的方法重写、property、运算符重载

2023-11-05

1.super()函数

        主要是用来调用父类的方法,在子类中调用父类的方法时进行使用。

2.私有方法、私有属性

(1)定义方法:

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

(2)私有方法:

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

(3)私有属性:

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

3.property() 函数

(1)作用:

        在新式类中返回属性值。

(2)语法:

class property([fget[, fset[, fdel[, doc]]]])

(3)参数:

        fget——获取属性值的函数

        fset——设置属性值的函数

        fdel——删除属性值函数

        doc——属性描述信息

4.重载

基础重载方法
方法 描述 简单的调用
__init__ ( self [,args...] ) 构造函数。 obj = className(args)
__del__( self ) 析构方法, 删除一个对象。 del obj
__repr__( self ) 转化为供解释器读取的形式。 repr(obj)
__str__( self ) 用于将值转化为适于人阅读的形式。 str(obj)
__cmp__ ( self, x ) 对象比较。 cmp(obj, x)
运算符重载
方法 描述 何时调用
__add __ + X+Y, X+=Y
__sub __ - X-Y,X-=Y
__mul __ * X*Y
__pow__ ** X**Y
__cmp __ 比较:== X==Y,X<Y
__lt __ 比较:< X<Y
__eq __ 比较:= X=Y
__str __ 打印转换 print X,str(X)

例:

class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b
 
   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)
   
   def __add__(self,other):
      return Vector(self.a + other.a, self.b + other.b)
 
v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)

运行效果:

Vector(7,8)

5.单下划线、双下划线、头尾双下划线说明:

        __foo__:定义的是特殊方法,一般是系统定义名字,类似 __init__() 之类的。

        _foo:以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import * 。

        __foo:双下划线的表示的是私有类型(private)的变量,只能是允许这个类本身进行访问了。

6.案例

        (1)动态给类添加方法,具体是对猫的类中没有设置奔跑的方法, 在类外添加这个方法,并是打印显示。

        小猫类:Cat

"""
1.动态添加方法
要求
    动态给类添加方法,具体是对猫的类中没有设置奔跑的方法,在类外添加这个方法,并是打印显示。
"""

# 小猫类
class Cat:
    # 构造方法实例化对象属性
    def __init__(self, name, sex, food):
        self.name = name
        self.sex = sex
        self.food = food

# 动态添加对象的run方法
def run(self):
    print("可爱的{}是个{}性龙猫,它很喜欢吃{},它正在欢快地奔跑!".format(self.name, self.sex, self.food))

def main():
    # 创建一个小猫类的对象:cat1
    cat1 = Cat("叮当", "雄", "鲜嫩多汁的植物")
    # 调用动态添加的run方法
    cat1.run = run
    # 调用创建的小猫类对象的run方法
    cat1.run(cat1)

if __name__ == "__main__":
    main()

        运行结果:

可爱的叮当是个雄性龙猫,它很喜欢吃鲜嫩多汁的植物,它正在欢快地奔跑!

        (2)在类中对__pow__、__cmp__进行运算符重载,主要对的两个成 绩进行平方运算、比较两个成绩。

        成绩类:Grade

"""
2.运算符重载
要求:
    在类中对__pow__、__cmp__进行运算符重载,主要对的两个成绩进行平方运算、比较两个成绩。
"""

# 创建Grade成绩类,重载pow和cmp运算符
class Grade:
    # 构造方法实例化对象属性
    def __init__(self, name, grade):  # 接收参数
        self.name = name
        self.grade = grade

    # 重载pow运算符
    def __pow__(self, other, modulo=None):
        return pow(self.grade, 2)

    # 重载cmp运算符
    def __cmp__(self, other):  # 两个参数
        if self.grade > other.grade:  # 第一个数大于第二个数,输出第一个数
            return self.grade
        if (self.grade == other.grade):
            return "二者相等"
        if self.num < other.num:  # 第一个数小于第二个数,输出第二个数
            return other.num

def main():
    # 实例化Grade的对象
    a = Grade("小明", 99)
    b = Grade("小红", 96)
    # 打印结果
    print(a.__pow__(99))  # 输出平方
    print(b.__pow__(96))  # 输出平方
    print(a.__cmp__(b))  # 输出最大值

if __name__ == "__main__":
    main()

        运行结果:

9801
9216
99
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python——类的方法重写、property、运算符重载 的相关文章

  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • Pandas 将多行列数据帧转换为单行多列数据帧

    我的数据框如下 code df Car measurements Before After amb temp 30 268212 26 627491 engine temp 41 812730 39 254255 engine eff 15
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk

随机推荐

  • "res://ieframe.dll/dnserrordiagoff.htm"

    最近用vs2005做web应用程序的时候 遇到个奇怪的问题 有的时候点击某个链接 或者触发一个页面刷新的事件时 网页就会跳转成无法显示网页的状态 地址栏中的url是 res ieframe dll dnserrordiagoff htm 一
  • VMware vSphere Hypervisor 6 (ESXi) 免费许可证使用限制

    公司在虚拟化方面使用的是hyper v方案 但是windows的不稳定让人头疼 更新补丁和死机问题都需要定期重启 对于虚拟化平台简直就是灾难 最近在查看关于EXSi6的免费使用限制 没看到太多中文资料 在vmware论坛的Hyperviso
  • C# .net 使用RabbitMq讲解

    一 环境搭建 首先 由于RabbitMQ使用Erlang编写的 需要运行在Erlang运行时环境上 所以在安装RabbitMQ Server之前需要安装Erlang 运行时环境 可以到Erlang官网下载对应平台的安装文件 如果没有安装运行
  • 强引用、软引用、弱引用和虚引用的区别

    1 强引用 StrongReference 最普遍的一种引用方式 如String s abc 变量s就是字符串 abc 的强引用 只要强引用存在 则垃圾回收器就不会回收这个对象 2 软引用 SoftReference 用于描述还有用但非必须
  • ecshop漏洞修复整理

    1 ECShop存在一个盲注漏洞 问题存在于 api client api php文件中 提交特制的恶意POST请求可进行SQL注入攻击 可获得敏感信息或操作数据库 路径 api client includes lib api php 参照
  • ABAP常用系统变量 sy-

    直接在syst结构里面可以找到 abap系统变量 SY SUBRC 系统执行某指令后 表示执行成功与否的变量 0表示成功 SY DBLNT 被处理过的记录的笔数 SY UNAME 当前使用者登入SAP的USERNAME SY DATUM 当
  • Redis 基础总结

    1 NoSQL概述 1 1 数据库分类 目前数据库分 关系型数据库与非关系型数据库 常用的关系型数据库 Oracle MySQL SqlServer DB2 常用的非关系数据库 Redis MongoDB ElasticSearch Hba
  • python实现消消乐小游戏

    import random import time 游戏面板大小 BOARD SIZE 10 图案种类数 PATTERN COUNT 4 相邻图案个数 ADJACENT COUNT 3 游戏时间限制 秒 GAME TIME 60 得分表 S
  • 记录Vue3+ts+ElementPlus 多层级表头动态表格创建

    因为工作需要 需要一个如上图 不确定层级的 多层级表头的表格 搜索网上的方法 多为vue2 element ui的方法 查到的vue3 Element plus的方法仅为建立两层级表格 经借鉴大神方法并修改成功 供自己留存 大神略过 一 创
  • Unity3D开发之Matrix4x4矩阵变换

    在Unity开发中时常会用到Matrix4x4矩阵来变换场景中对象的位置 旋转和缩放 但是很多人都不太理解这儿Matrix4x4变换矩阵 通过DX中的变换矩阵我来讲一讲在unity中这个变换矩阵是怎么变换的 在三维图形程序中 我们可以用几何
  • 稀疏数组(最详解)

    概念 当一个数组中大部分元素为0 或者为同一值的数组时 可以使用稀疏数组来保存该数组 稀疏数组的处理方式是 记录数组一共有几行几列 有多少个不同值 把具有不同值的元素和行列及值记录在一个小规模的数组中 从而缩小程序的规模 如下图 左边是原始
  • 左手坐标系和右手坐标系

    转自 https blog csdn net xiaoluoshan article details 53384103 基本的数学知识 左手坐标系和右手坐标系 这些对于搞图像开发或者游戏开发的朋友来说 应该是很基础的东西 不过对于大部分人来
  • VB mschart控件的使用

    一 先看个小例子 Private Sub Form Load Dim MyData 20 1 As Double x轴坐标值 Y轴坐标值 MyData 0 0 0 MyData 0 1 180 本句代表了 第一点数据的X轴坐标为0 Y轴坐标
  • UCOS2的文件目录

    想着闲着也是闲着 把之前学习ucos2源码的笔记整理一下 复盘一次 总结内容将其写为博客作为学习的输出 一 为什么要学RTOS或者IOTOS 我在大一时 开始进入实验室接触单片机 摸爬滚打的参加了几次比赛 也因此入了嵌入式的坑 大三时开始思
  • 一位年薪40W的测试被开除,回怼的一番话,令人沉思

    一位年薪40W测试工程师被开除回怼道 反正我有技术 在哪不一样 一技傍身 万事不愁 当我们掌握了一技之长后 在职场上说话就硬气了许多 不用担心被炒 反过来还可以炒了老板 这一点在码农界特别明显 许多测试人在辞职时 都有一种心态 烂公司 烂领
  • 学习第一天const

    constant 指针与const const char a 指向const对象的指针或者说指向常量的指针 char const a 同上 char const a 指向类型对象的const指针 或者说常指针 const指针 const c
  • ORACLE集群管理-19c RAC ipv6+IPV4双栈配置实战

    关于IPV6支持问题 单实例环境要支持IPV6 数据库版本至少11 2 0 4版本 其实从linux7开始系统默认开启ipv6 怎么确认ipv6是否开启呢 下面介绍两种常见的方法 1 通过查看网卡属性确定 ifconfig a 命令输出有
  • Vue计算两个datetime共多少天

    假如starttime和endtime都是YYYY MM DD HH mm ss类型 将选择器的默认时间格式 object 转换成时间戳 开始时间减去结束时间 时间戳的形式进行运算 s然后转换成天数 通过toFixed函数保留两位小数 th
  • c语言中swap的意思,C语言中swap的作用和用法?

    慕村225694 swap函数一般是一个程序员自定义函数 通常是实现两个变量数值的交换 比如123int a 2 int b 3 swap a b 一般用到变量数值交换 交换后a 3 b 2 实现的方法多种多样 比如下面几种写法 1 通过使
  • Python——类的方法重写、property、运算符重载

    1 super 函数 主要是用来调用父类的方法 在子类中调用父类的方法时进行使用 2 私有方法 私有属性 1 定义方法 在类的内部 使用def关键字可以为类定义一个方法 与一般函数定义不同 类方法必须包含参数self 且为第一个参数 2 私