【问题标题】:What's implicit method call and explicit method call?什么是隐式方法调用和显式方法调用?
【发布时间】:2012-08-04 00:50:16
【问题描述】:

我在我的 Python 教科书中读到了这些术语。我无法通过查找它们的字面意思来弄清楚它们的含义。有人可以向我解释一下或提供一些参考吗?

--更新术语的上下文

i) (­42).__abs__() # Need parentheses to avoid confusing ... # ... method call '.' with decimal point
j) (42).__mul__(2) # Even multiplication is a method call
k) name.swapcase()
l) name.title().swapcase() # name.title() is an object so ... m) name.upper().find('TOM') # ... we can “cascade” method calls.

希望您现在意识到您所做的大部分操作 本课程的到目前为止实际上是通过隐式调用提供的 您一直在使用的对象(数据项)的方法。 实际上,所有运算符('+'、'*' 等)只是 方法调用,但只有部分内置函数对应 方法。

【问题讨论】:

    标签: python terminology


    【解决方案1】:

    根据我的理解,Python 会隐式调用某些方法,因为某些运算符(如 '+'、'-'、'*'、'.'、'//'、()、del 等)或表达式中使用的内置函数(如 repr、str、divmod、pow 等)。因此调用的方法是术语“魔术方法”或“dunder”,因为它们中的大多数都以__ 前缀和后缀命名。

    更多详情请见https://docs.python.org/3.8/reference/datamodel.html

    这些方法也可以显式调用。例如,在您的问题中:

    abs(42)
    

    可以called为:

    (42).__abs__()
    

    42.0.__abs__()
    

    【讨论】:

      【解决方案2】:

      Java 允许隐式和显式函数调用。

      例子:

      public class Junk
      {
        private int a = 1;
        public String toString () { return (a); }
      }
      
      void main (String [] args)
      {
        Junk j = new Junk (); // implicit call to Junk's default constructor 
        System.out.println (j); // implicit call to j.toString();
        System.out.println (j.toString()); // explicit call to j.toString();
      }
      

      【讨论】:

        【解决方案3】:

        隐式调用是由编译器自动进行的函数调用,无需用户干预,而显式调用是用户使用特定类型的代码进行的。

        【讨论】:

          【解决方案4】:

          好吧,我不知道您书中这些术语的上下文,但我找到了implicit-vs-explicit-programming。它首先谈到了explicit programmingimplicit programming,然后是implicit method callexplicit member call。不确定它是否有帮助。也许你可以给我们更多的细节。

          编辑

          我想这意味着当您使用3+23*2 时,您似乎没有显式调用任何方法,但实际上您调用了因为它们的实现方式是调用(3).__add__(2) 或@ 987654329@。所以你隐式调用了这些方法。

          【讨论】:

          • 感谢您提供链接,我仍在等待一些代码示例顺便说一句,我已在教科书中更新了该术语的上下文
          【解决方案5】:

          隐式方法调用是指特定方法将被自己调用(如java中的JVM),显式方法调用是指该方法将由用户调用。

          【讨论】:

          • 我认为为对象分配内存时的默认构造函数调用可以认为是隐式方法调用(甚至构造函数也是一种特殊方法)。而调用用户定义的方法可以认为是显式的方法调用
          • 我可以再举一个例子,当我们在 java 中使用 System.out.println() 并尝试打印一个整数时,System.out.println() 会自动调用 toString() 来转换特定的整数值到字符串,然后打印它
          猜你喜欢
          • 1970-01-01
          • 2012-08-04
          • 2012-05-15
          • 2023-03-15
          • 1970-01-01
          • 2016-01-09
          • 1970-01-01
          • 2023-04-03
          • 2016-12-23
          相关资源
          最近更新 更多