1

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

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

4

5 回答 5

4

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

编辑

我想这意味着当你使用3+2或者3*2看起来你没有显式调用任何方法但实际上你调用了,因为它们的实现方式是调用(3).__add__(2)or (3).__mul__(2)。所以你隐式调用这些方法。

于 2012-08-07T03:14:39.470 回答
4

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

于 2012-08-07T03:04:40.013 回答
0

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

于 2015-04-16T05:32:33.630 回答
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();
}
于 2019-07-26T11:01:31.113 回答
0

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

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

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

abs(42)

可以称为

(42).__abs__()

或者

42.0.__abs__()
于 2021-02-20T03:10:32.213 回答