什么是隐式方法调用和显式方法调用?

时间:2012-08-07 02:55:05

标签: terminology

我在我的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.
  

希望您现在意识到您已经完成了大部分操作   在这个过程中,实际上是通过隐式调用提供的   您一直在使用的对象(数据项)的方法。   实际上,所有运算符('+','*'等)都只是语法快捷键   方法调用,但只有一些内置函数对应   方法

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

好吧,我不知道你书中这些术语的背景,但我发现implicit-vs-explicit-programming。它首先讨论了explicit programmingimplicit programming,然后是implicit method callexplicit member call。不确定它是否有帮助。也许你可以给我们更多细节。

修改

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

答案 2 :(得分:0)

隐式调用是函数调用,它由编译器自动生成而不会受到用户的干扰,而显式调用则由用户使用特定类型的代码进行。

答案 3 :(得分:0)

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();
}

答案 4 :(得分:0)

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

有关详细信息,请参阅 https://docs.python.org/3.8/reference/datamodel.html

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

abs(42)

可以是 called 为:

(42).__abs__()

42.0.__abs__()