7 个 Python 问题,来扫扫盲

这 7 个问题,我是有收获的,整理如下:

1、反射算术运算符

你可能知道 Python 里面的魔法函数,比如 __add____sub__ 代表 + - 运算符,表示 obj +/- something,但你可能不知道还有一个 __radd____rsub__ 函数,可以表示 something +/- obj。

举例如下:

class Dog:def __add__(self, other):return "from __add__"def __radd__(self, other):return "from __radd__"
dog = Dog()
print(dog + 1)   # from __add__
print(1 + dog)   # from __radd__

2、getattr vs getattribute

__getattr__ 魔术方法只有在我们试图获取不存在的属性时才会被调用,__getattribute__ 在每次我们尝试访问属性时都会被调用。

代码如下:

class Dog:def __init__(self, name, age):self.name = nameself.age = agedef __getattr__(self, key):return f"{key} not found"
dog = Dog("taidi", 5)
print(dog.name)    # taidi
print(dog.age)     # 5
print(dog.breed)   # breed not found
class Dog:def __init__(self, name, age):self.name = nameself.age = agedef __getattribute__(self, key):return f"{key} not found"
dog = Dog("taidi", 5)
print(dog.name)    # name not found
print(dog.age)     # age not found
print(dog.breed)   # breed not found

3、super().init() 的另一种写法

class Animal:def __init__(self, name, age):self.name = nameself.age = age
class Dog(Animal):def __init__(self, name, age, breed):super().__init__(name, age)self.breed = breed

等价于:

class Animal:def __init__(self, name, age):self.name = nameself.age = age
class Dog(Animal):def __init__(self, name, age, breed):Animal.__init__(self, name, age)self.breed = breed

请注意,Animal.__init__(self, name, age) 不能少了 self 参数。

4、检查子类的方法

class Animal: pass
class Dog(Animal): pass
class Cat(Animal): pass
class GermanSheperd(Dog): pass
print(Animal.__subclasses__())
# [<class '__main__.Dog'>, <class '__main__.Cat'>]

不过,.__subclasses__() 只能检查直接子类。

5、多重继承时,同名函数,子类用的是哪一个?

class A:def test(self):print("A")
class B:def test(self):print("B")
class C(A, B):passC().test()   # A

A 和 B 都有 test 方法,那么 C 到底继承了哪一个呢?在 Python 中,最左边的类优先。

在这里,A 是最左边的父类,因此 A 的 test 方法被继承。

多重继承让人困惑,不用为好。

6 invert 魔法函数

class Dog:def __invert__(self):return "test"
dog = Dog()
print(~dog)   # test

~ 运算符代表“按位非”,通常用于反转内容。一个更有意义的例子如下:

class Coordinate:def __init__(self, x, y):self.x = xself.y = ydef __str__(self):return f"({self.x}, {self.y})"def __invert__(self):return Coordinate(-self.x, -self.y)
a = Coordinate(3, 4)
b = ~a
print(a, b)   # (3, 4) (-3, -4)

7、不使用 class 来创建类

def init(self, name, age):self.name = nameself.age = age
def bark(self):print("woof")
Dog = type("Dog", (), {"__init__":init, "bark":bark})dog = Dog("taidi", 10)
print(dog.name)
print(dog.age)# taidi
# 10

在这里,我们将 3 个参数传递给 type 以创建我们的类。

第一个参数 __name__ 是类的名称 第二个参数 __bases__ 是一个包含父类的元组 第三个参数 __dict__ 是一个包含属性和方法的字典。

等价于:

class Dog:def __init__(self, name, age):self.name = nameself.age = agedef bark(self):print("woof")

最后

以上七个问题,如有帮助,请点赞关注支持。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

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

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

相关文章

李廉洋:4.15黄金,原油最新资讯,美盘走势分析及策略。

由于欧洲央行很可能先于美联储降息&#xff0c;美元走强。法国兴业银行分析师基特•朱克斯表示&#xff0c;市场“假设我们看到欧洲央行将在6月降息&#xff0c;但美联储不会”&#xff0c;这对美元有利。朱克斯表示&#xff0c;尽管在货币政策决定之前会公布一些相关数据&…

【Node.js】Express学习笔记(黑马)

目录 初识 ExpressExpress 简介Express 的基本使用托管静态资源nodemon Express 路由路由的概念路由的使用 Express 中间件中间件的概念Express 中间件的初体验中间件的分类 初识 Express Express 简介 什么是 Express&#xff1f; 官方给出的概念&#xff1a;Express 是基于…

软件杯 深度学习卷积神经网络的花卉识别

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

zabbix 使用 dataease 做数据大屏

1、环境介绍 操作系统&#xff1a;龙蜥os 7.9 软件&#xff1a;dataease v1.18.18 zabbix&#xff1a; 6.0 2、软件下载 https://community.fit2cloud.com/#/products/dataease/downloads 3、将软件包上传到服务器并解压缩 tar -xvf dataease-v1.18.18-offline.tar.gz4、修改…

2024第十五届蓝桥杯 C/C++ B组 参赛经历分享(以及部分题解)

前言 emmmmmm&#xff0c;dp杯居然不考dp了&#xff0c;蓝桥一直没怎么出过的高精度居然也考了&#xff08;当时居然因为没太复习那块知识直接模拟混分了&#xff09;&#xff0c;题量也改了&#xff0c;总的来说反而简单了&#xff1f;。。。还好天津竞赛弱省&#xff0c;但愿…

代码随想录算法训练营第55天|392.判断子序列|115.不同的子序列

代码随想录算法训练营第55天|392.判断子序列|115.不同的子序列 392.判断子序列 这道题目算是 编辑距离问题 的入门题目&#xff08;毕竟这里只是涉及到减法&#xff09;&#xff0c;慢慢的&#xff0c;后面就要来解决真正的 编辑距离问题了 https://programmercarl.com/0392.…

弹性 MapReduce(EMR)

一.产品简介 1产品概述 E腾讯云 EMR 提供基于云服务器&#xff08;CVM&#xff09;和容器服务&#xff08;TKE&#xff09;两种部署运行方式&#xff1a; 2.Agent 的安装目录 Linux 安装目录是/usr/local/qcloud/stargate和/usr/local/qcloud/monitor CoreOs 安装目录是/va…

IBM SPSS Statistics for Mac:数据分析的卓越工具

IBM SPSS Statistics for Mac是一款功能强大的数据分析软件&#xff0c;专为Mac用户设计&#xff0c;提供了一系列专业的统计分析和数据管理功能。无论是科研人员、数据分析师还是学生&#xff0c;都能从中获得高效、准确的数据分析支持。 IBM SPSS Statistics for Mac v27.0.1…

在uni-app使用iconfont中的图标

uni-app 如何使用iconfont中的图标 在uni-app中使用Iconfont图标通常涉及以下几个步骤&#xff1a; 步骤一&#xff1a;获取Iconfont资源 访问 iconfont-阿里巴巴矢量图标库&#xff0c;注册并登录账号。 浏览或搜索所需的图标&#xff0c;将它们添加至购物车或直接创建项目进…

Servlet(一)

文章目录 1.Servlet整体框架2.Servlet快速入门1.创建项目配置基本环境2.添加jar包1.在WEB-INF下创建目录lib&#xff0c;添加文件2.添加到项目中3.配置代码提示 3.src下创建文件4.实现Servlet接口5.在web.xml配置HelloServlet6.通过浏览器访问HelloServlet 3.浏览器访问Servlet…

若依框架针对漏洞升级的记录

背景&#xff1a;项目部署在生产环境上以后&#xff0c;漏洞扫描的时候&#xff0c;发现各种漏洞需要修复&#xff0c;很多漏洞的升级后面都记不住了&#xff0c;所以现在都简单记录一下处理的步骤 20240415 解决方案&#xff1a;直接修改配置文件中的Spring security的版本…

WordPress JS Support Ticket插件 RCE漏洞复现

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。JS Support Ticket是使用在其中的一套开源票务系统插件。 0x02 漏洞概述 WordPress中的JS Support Ticket插件存在未经上传漏洞,未经身份验证的攻击者可以上传恶意脚本的服务器,执行任意指令,从而获…