【问题标题】:In Python, how can you respond to method calls that don't exist on an object? [duplicate]在 Python 中,如何响应对象上不存在的方法调用? [复制]
【发布时间】:2010-11-10 15:06:34
【问题描述】:

可能重复:
Dynamic Finders and Method Missing in Python

我知道你可以在 Ruby 中做到这一点,但是如何在 Python 中做到呢?

所以基本上你可以对不存在的方法调用使用正则表达式,并创建“语法糖”。

【问题讨论】:

标签: python metaprogramming


【解决方案1】:

Define __getattr__.

但这仍然不会使s./.*/ 的语法有效,如果这是您的想法的话。 Python 的语法没有 Ruby 的那么灵活。

【讨论】:

  • 真的吗?我出于某种原因认为它会非常相似
  • 你不能添加到 Python 的语法中。非标准语法糖主要用于防止其他人理解您的代码。
  • @Blankman:不。Python 想要简单而不是 Perl,所以它的语法比 Ruby 的要简单很多。
【解决方案2】:

您可以覆盖对象上的__getattribute__ 以处理对不存在的属性的请求。这仅适用于新型类。如果你有老式的类,你可以使用delnans answer

【讨论】:

  • 术语吹毛求疵:Python 或 Ruby 中没有重载(如 en.wikipedia.org/wiki/Method_overloading)。仅覆盖。
  • __getattribute__all 属性查找中被调用。 delnan 的回答对新式和旧式课程都是正确的。
  • 你把我弄糊涂了 :) 我认为(正确地,正如@Glenn 建议和文档确认的那样)__getattr__ 被称为缺少属性/方法(如问题所问)而 __getattribute__ 是定义时使用总是
猜你喜欢
  • 2019-01-15
  • 1970-01-01
  • 2020-12-13
  • 2015-05-23
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
相关资源
最近更新 更多