返回顶部
首页 > 资讯 > 后端开发 > Python >七 个 Python 问题,来扫扫盲
  • 348
分享到

七 个 Python 问题,来扫扫盲

Python问题反射算术 2023-05-14 20:05:10 348人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这 7 个问题,我是有收获的,整理如下:1、反射算术运算符你可能知道 python 里面的魔法函数,比如 __add__​ 和 __sub__​ 代表 + - 运算符,表示 obj +/- something,但你可能不知道还有一个 __r

这 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 = name
self.age = age
def __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 = name
self.age = age
def __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 = name
self.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 = name
self.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__())
# [, ]

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

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

class A:
def test(self):
print("A")
class B:
def test(self):
print("B")
class C(A, B):
pass

C().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 = x
self.y = y
def __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 = name
self.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 = name
self.age = age
def bark(self):
print("woof")

以上就是七 个 Python 问题,来扫扫盲的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 七 个 Python 问题,来扫扫盲

本文链接: https://lsjlt.com/news/205312.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 七 个 Python 问题,来扫扫盲
    这 7 个问题,我是有收获的,整理如下:1、反射算术运算符你可能知道 Python 里面的魔法函数,比如 __add__​ 和 __sub__​ 代表 + - 运算符,表示 obj +/- something,但你可能不知道还有一个 __r...
    99+
    2023-05-14
    Python 问题 反射算术
  • Python 全局变量扫盲
    Python没有真正的全局变量,在Java和C++中,全局变量则是程序级别的,站在它们的角度,那么python就是没有全局变量,而在python的角度,是有全局变量,python提供global关键字,可以修改全局变量,在python中的全...
    99+
    2023-01-31
    全局变量 Python
  • python算法表示概念扫盲教程
    本文为大家讲解了python算法表示概念,供大家参考,具体内容如下 常数阶O(1) 常数又称定数,是指一个数值不变的常量,与之相反的是变量 为什么下面算法的时间复杂度不是O(3),而是O(1)。 int...
    99+
    2022-06-04
    算法 概念 教程
  • spring配置扫描多个包问题解析
    spring 配置扫描多个包,有时候我们希望不同功能类型的包放在不同的包下,这就需要<!-- 自动扫描该包,使 SpringMVC 为包下用了@controller注解的类是控制器 --> <context:compone...
    99+
    2023-05-30
    java spring
  • 为 Golang 初学者扫盲:常见难题的明晰解答
    解决 golang 初学者的常见难题:访问全局变量: 使用 global_variable 语法,如 global_variable_x。修改函数参数值: 使用引用传递(指针),如 *y...
    99+
    2024-05-06
    golang 初学者
  • windows8技巧知识扫盲 50个win8使用技巧大全
    windows 8操作系统相信大家已经不再陌生了,虽然正式版本还未发布,但不少朋友已经在使用微软事先推出的windows 消费者预览版,直白的说就是公测版,预览版是免费的,但仅可以使用一年,但其功能与后期发...
    99+
    2022-06-04
    使用技巧 技巧 知识
  • 基于MapperXML扫描的问题
    目录MapperXML扫描的问题1、如果将XML放在java目录下2、如果放resources下,则在.properties下配置说明mybatis自动扫描XML文件填坑Mapper...
    99+
    2024-04-02
  • Python 自然语言处理扫盲:掌握语言的秘密
    自然语言处理 (NLP) 是一门令人着迷的技术领域,它使计算机能够 "理解" 人类语言,从而探索语言的奥秘。本指南将带你踏上 NLP 之旅,开启语言理解的新维度。 基础篇:理解语言的组成部分 NLP 从语言的构建块开始,即词语和句法。计算...
    99+
    2024-04-02
  • 怎么理解PostgreSQL全表扫描问题
    这篇文章主要讲解了“怎么理解PostgreSQL全表扫描问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解PostgreSQL全表扫描问题”吧!本节...
    99+
    2024-04-02
  • springMVC不扫描controller中的方法问题
    目录springMVC不扫描controller下面是正确的spring-mvc.xml文件那我遇到这个问题的原因是什么呢?springMVC包扫描问题为什么@COntroller要...
    99+
    2024-04-02
  • springBoot mybatis包扫描问题怎么解决
    这篇文章主要介绍了springBoot mybatis包扫描问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springBoot mybatis包扫描问题怎么解决文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-08
  • 100天精通Python丨基础知识篇 —— 04、Python基础知识扫盲(第一个Python程序,13个小知识点)
    文章目录 🐜 1、Python 初体验 Pycharm 第一个程序 交互式编程第一个程序 🐞 2、Python 引号 ...
    99+
    2023-09-08
    python 开发语言 公众号:信息技术智库,回复资料 原力计划
  • LeetCode上的算法问题能否通过扫描二维码来解决?
    LeetCode是一个非常著名的算法练习平台,很多程序员都会在这个平台上刷题。但是,有时候我们会遇到一些问题,比如说我们找不到题目对应的代码,或者我们无法理解题目的意思。那么,能否通过扫描二维码来解决这些问题呢?本文将探讨这个问题。 首先,...
    99+
    2023-09-11
    二维码 npm leetcode
  • Component-Scan 不扫描jar里面的类问题
    目录Component-Scan 不扫描jar里面的类关于context:component-scan等等一些列扫描包的问题记录解决Component-Scan 不扫描jar里面的类...
    99+
    2024-04-02
  • 如何解决SpringBoot扫描不到Controller的问题
    本篇内容主要讲解“如何解决SpringBoot扫描不到Controller的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决SpringBoot扫描不到Controller的问题”吧!...
    99+
    2023-06-20
  • Python怎么构建一个文档扫描器
    本篇内容主要讲解“Python怎么构建一个文档扫描器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么构建一个文档扫描器”吧!准备好环境首先您应该熟悉Python的基础知识,还需要了...
    99+
    2023-07-05
  • @MapperScan扫描包里混有@Service等问题怎么办
    小编给大家分享一下@MapperScan扫描包里混有@Service等问题怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!@MapperScan扫描包混有@Service问题描述@MapperScan注解配置的一般是d...
    99+
    2023-06-29
  • vue项目elementUIinput框扫码枪扫描过快出现数据丢失问题及解决方案
    目录项目需求:解决方案探索错误代码:问题就出在解决方法完整代码 如下项目需求: 输入框要掉两个接口,根据第一个验证接口返回的code,弹不同的框,点击弹框确认再掉第二个接口 根据...
    99+
    2022-12-08
    vue扫码枪 vue element UI input框扫码枪 vue扫码枪数据丢失
  • 50个SQL语句(MySQL版) 问题七
    --------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 teacher(TId,Tname)...
    99+
    2021-04-29
    50个SQL语句(MySQL版) 问题七
  • 怎么用Python做了一个Windows扫雷游戏
    怎么用Python做了一个Windows扫雷游戏,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Windows XP 上的扫雷是无数80/90后的集体回忆,今天我...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作