我在我的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.
希望您现在意识到您已经完成了大部分操作 在这个过程中,实际上是通过隐式调用提供的 您一直在使用的对象(数据项)的方法。 实际上,所有运算符('+','*'等)都只是语法快捷键 方法调用,但只有一些内置函数对应 方法
答案 0 :(得分:4)
隐式方法调用意味着特定方法将自己调用(如java中的JVM),显式方法调用意味着该方法将由用户调用。
答案 1 :(得分:3)
好吧,我不知道你书中这些术语的背景,但我发现implicit-vs-explicit-programming。它首先讨论了explicit programming
和implicit programming
,然后是implicit method call
和explicit member call
。不确定它是否有帮助。也许你可以给我们更多细节。
修改强>:
我认为这意味着当你使用3+2
或3*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__()