【问题标题】:How is operator.eq implemented in python? [duplicate]python中operator.eq是如何实现的? [复制]
【发布时间】:2020-09-30 19:18:36
【问题描述】:

当我们打印operator.eq.__name__ 时,我们得到输出'eq'。这意味着 operator.eq 是一个类。 但我们也可以将其用作函数。 operator.eq("test", "test") 返回True。 operator.eq 是如何实现的?是类还是函数?

【问题讨论】:

  • 不是完全重复,但 FWIW 我确实解释了 .eq 比较如何在 python 的引擎盖下工作。

标签: python python-3.x function class operators


【解决方案1】:

operator.eqoperator 模块的一个函数。所有函数都有一个__name__ 属性,大多数类也是如此。

eq很简单,看看source

def eq(a, b):
    "Same as a == b."
    return a == b

您可以使用以下代码在 CLI 中进行演示。

def cool_name():
    pass

class NeatName:
    pass

print(cool_name.__name__)
print(NeatName.__name__)

有趣的是,函数仍然是一个类,并且可以被视为一个类。您可以将属性和函数分配给另一个函数。

cool_name.foo = "foo"
print(cool_name.foo)

def bar_func():
    print("bar")

cool_name.bar = bar_func

cool_name.bar()

【讨论】:

  • “所有函数都有一个__name__ 属性,Python 中几乎每个对象也一样”——相反,大多数对象没有__name__。它主要是具有__name__ 的函数和类。
  • “有趣的是,一个函数仍然是一个类,就像 Python 中的所有东西一样”——这也是错误的。函数不是类。 Python 中的大多数东西都不是类。
  • 既然基础object 实现了__name__,那么默认情况下,这不就意味着大多数Python 对象都有__name__ 吗?我唯一能想到的不是内置类型。
  • 没有。与常见的误解相反,对象不会自动具有其类的所有属性。默认属性查找行为包括搜索对象类和所有超类的__dict__s,但该搜索不会找到通过元类解析的类属性。
  • 对不起,我是 python 新手。我是从 c++ 到 python 的,具有属性的函数的概念对我来说是新的。函数怎么会有属性?您能否将我重定向到可以找到更多详细信息的任何有用链接?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2019-11-18
  • 2012-06-26
  • 1970-01-01
  • 2013-11-16
  • 2011-05-13
  • 2011-09-16
相关资源
最近更新 更多