GVKun编程网logo

Python super()参数:为什么不选择super(obj)?(python中的super有什么用)

16

在本文中,我们将详细介绍Pythonsuper的各个方面,并为您提供关于参数:为什么不选择super的相关解答,同时,我们也将为您带来关于Java什么时候使用super()?、Java为什么要在构造函

在本文中,我们将详细介绍Python super的各个方面,并为您提供关于参数:为什么不选择super的相关解答,同时,我们也将为您带来关于Java 什么时候使用super()?、Java为什么要在构造函数中调用super()?、python -- 进程管理工具 supervisor(supervisor-py3k)、Python 2.7 super()错误的有用知识。

本文目录一览:

Python super()参数:为什么不选择super(obj)?(python中的super有什么用)

Python super()参数:为什么不选择super(obj)?(python中的super有什么用)

我试图了解何时以及如何在Python中正确使用super()(2.7.x或3.x)

>>> help(super)翻译告诉我怎么称呼它:

class super(object) |  super(type) -> unbound super object |  super(type, obj) -> bound super object; requires isinstance(obj, type) |  super(type, type2) -> bound super object; requires issubclass(type2, type)

我了解在Python3.x中现在可以在类定义中使用super(),但是我不明白为什么super(obj)不可能。或super(self)在类定义中。

我知道一定有原因,但是我找不到。对我来说,这些行等于super(obj.__class__, obj)或,super(self.__class__,self)并且行得通吗?

我认为super(obj)即使在Python 3.x中,键入也是一个不错的快捷方式。

答案1

小编典典

仅在Python
2中才需要两个参数的形式。其原因是,它self.__class__总是引用继承树中的“叶子”类(即对象的最特定类),但是调用super时需要告诉它是当前正在调用的实现,因此它可以在继承树中调用下一个实现。

假设您有:

class A(object):   def foo(self):      passclass B(A):   def foo(self):      super(self.__class__, self).foo()class C(B):   def foo(self):      super(self.__class__, self).foo()c = C()

需要注意的是c.__class__C,始终。现在考虑如果您打电话给我会发生什么c.foo()

当您调用super(self.__class__, self)C的方法时,它将类似于call super(C,self),这意味着“调用C继承的此方法的版本”。那会叫B.foo,这很好。但是当您super(self.__class__,self)从B呼叫时,它仍然像在呼叫super(C,self),因为它是相同的self,所以self.__class__仍然如此C。结果是B中的调用将再次调用,B.foo并且发生无限递归。

当然,您真正想要的是能够调用super(classThatDefinedTheImplementationThatIsCurrentlyExecuting,self),这实际上就是Python 3super()所做的。

在Python 3中,您可以做,super().foo()并且可以做正确的事。对我来说,你对super(self)捷径的含义还不清楚。在Python
2中,由于上述原因,它不起作用。在Python 3中,这将是“ longcut”,因为您可以只使用Plain super()

super(type)super(type1, type2)用途可能仍然偶尔需要在Python 3,但那些总是不正常的情况下,更深奥的用途。

Java 什么时候使用super()?

Java 什么时候使用super()?

如何解决Java 什么时候使用super()??

精确 调用始终super()是多余的。它明确地在做否则会隐式地做的事情。这是因为如果你省略对超级构造函数的调用,则无论如何都将自动调用无参数的超级构造函数。并不是说这是不好的风格。有些人喜欢露骨。

但是,当超级构造函数采用你要从子类传递的参数时,它才变得有用。

public class Animal {
   private final String noise;
   protected Animal(String noise) {
      this.noise = noise;
   }

   public void makeNoise() {
      System.out.println(noise);
   }
}

public class Pig extends Animal {
    public Pig() {
       super("Oink");
    }
}

解决方法

我目前正在Java课程中学习有关类继承的信息,我不知道何时使用该super()调用?

编辑:
我发现使用此代码示例:super.variable

class A
{
    int k = 10;
}

class Test extends A
{
    public void m() {
        System.out.println(super.k);
    }
}

因此,我知道在这里,你必须使用它super来访问k超类中的变量。但是,在其他情况下,该怎么super();办?在其自己的?

Java为什么要在构造函数中调用super()?

Java为什么要在构造函数中调用super()?

如何解决Java为什么要在构造函数中调用super()??

super()对于具有父级的所有类(这是Java中每个用户定义的类),都有一个不带参数的隐式调用,因此通常不需要显式调用。但是,如果父级的构造函数接受参数,并且你希望指定它们,则可以使用super()with参数调用。此外,如果父级的构造函数接受参数,并且没有默认的无参数构造函数,则需要super()使用参数进行调用。

一个示例,其中的显式调用super()使你可以进一步控制框架的标题:

class MyFrame extends JFrame
{
    public MyFrame() {
        super("My Window Title");
        ...
    }
}

解决方法

我正在处理一个扩展的类JFrame

这不是我的代码,它super在开始构造GUI之前先进行调用。我想知道为什么要这样做,因为我一直只访问超类的方法而不必调用super();

python -- 进程管理工具 supervisor(supervisor-py3k)

python -- 进程管理工具 supervisor(supervisor-py3k)

1、安装

pip install supervisor

2、配置

echo_supervisord_conf > /etc/supervisord.conf

3、修改配置

vim /etc/supervisord.conf

4、启动

#使用默认的配置文件 /etc/supervisord.conf

supervisord

# 明确指定配置文件

supervisord -c /etc/supervisord.conf

# 使用 user 用户启动 supervisord

supervisord -u user

 

supervisorctl 命令介绍

# 停止某一个进程,program_name 为 [program:x] 里的 x
supervisorctl stop program_name
# 启动某个进程supervisorctl start program_name
# 重启某个进程supervisorctl restart program_name
# 结束所有属于名为 groupworker 这个分组的进程 (start,restart 同理)
supervisorctl stop groupworker:
# 结束 groupworker:name1 这个进程 (start,restart 同理)supervisorctl stop groupworker:name1
# 停止全部进程,注:start、restart、stop 都不会载入最新的配置文件supervisorctl stop all
# 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程supervisorctl reload
# 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启supervisorctl update

Python 2.7 super()错误

Python 2.7 super()错误

尝试使用super()创建Tkinter窗口。我收到此错误:

超级(应用程序,自我)。 _初始化 _(主)TypeError:必须为类型,而不是classobj

码:

import Tkinter as tkclass Application(tk.Frame):    def __init__(self, master):        super(Application, self).__init__(master)        self.grid()def main():    root = tk.Tk()    root.geometry(''200x150'')    app = Application(root)    root.mainloop()main()

答案1

小编典典

Tkinter使用老式的类。super()只能与新型类一起使用。

关于Python super参数:为什么不选择super的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Java 什么时候使用super()?、Java为什么要在构造函数中调用super()?、python -- 进程管理工具 supervisor(supervisor-py3k)、Python 2.7 super()错误的相关信息,请在本站寻找。

本文标签: