gpt4 book ai didi

python - 如何区分类、函数和方法

转载 作者:行者123 更新时间:2023-11-28 22:58:34 27 4
gpt4 key购买 nike

在 Python 中,dir() 函数用于显示传递给它的参数的属性、类、方法列表,对吗?

例如python中有一个模块email

import email
dir(email)

结果:

['Charset', 'Encoders', 'Errors', 'FeedParser', 'Generator', 'Header', 'Iterators', 'LazyImporter', 'MIMEAudio', 'MIMEBase', 'MIMEImage', 'MIMEMessage', 'MIMEMultipart', 'MIMENonMultipart', 'MIMEText', 'Message', 'Parser', 'Utils', '_LOWERNAMES', '_MIMENAMES', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', '_name', 'base64MIME', 'email', 'importer', 'message_from_file', 'message_from_string', 'mime', 'quopriMIME', 'sys']

所以我想知道的是如何判断上面列表中的给定对象是属性、方法、类还是函数。

从上面的列表中,我们可以认为__all____builtins____doc__等都是属性,但是我们如何区分所有/仅通过查看列表还剩下这些类型?

最佳答案

它们是所有 属性,其中一些属性可能引用函数、某些类或对象。像 __this__ 这样的通常称为 magic methods .

你可以看看:

[type(getattr(email, x)) for x in dir(email)]

但最好的答案是:“我在乎什么?”

您需要了解的有关接口(interface)的任何信息最好在模块的文档中找到。各种属性的类型用处不大,重要性不高(dir 也可能不完整)。

所以不要打扰类型检查。值得了解(和使用)python 命名约定(参见 pep8):

  • CamelCase
  • snake_case 函数和方法
  • SHOUTY_CASE 常量
  • _leading 下划线表示“私有(private)”事物(即未记录的实现细节,不打算成为公共(public)接口(interface)的一部分)
  • __double 前导下划线用于启用 name mangling ,这是一种在复杂的继承情况下处理可能的 namespace 冲突的方法(这是一个非常晦涩的功能,在正常使用中几乎肯定不需要)
  • __dunder__ 如前所述,魔术方法的“双下划线”事物,这些是 Python 本身的数据模型 Hook 。您可以重新定义现有的 Hook 以自定义您的类和模块中的行为,但不要仅仅为了您自己的目的发明新的神奇名称,而是使用普通属性。

关于python - 如何区分类、函数和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13757724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com