在本文中,我们将详细介绍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有什么用)
- Java 什么时候使用super()?
- Java为什么要在构造函数中调用super()?
- python -- 进程管理工具 supervisor(supervisor-py3k)
- Python 2.7 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()??
精确 调用始终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()??
super()
对于具有父级的所有类(这是Java中每个用户定义的类),都有一个不带参数的隐式调用,因此通常不需要显式调用。但是,如果父级的构造函数接受参数,并且你希望指定它们,则可以使用super()with
参数调用。此外,如果父级的构造函数接受参数,并且没有默认的无参数构造函数,则需要super()
使用参数进行调用。
一个示例,其中的显式调用super()
使你可以进一步控制框架的标题:
class MyFrame extends JFrame
{
public MyFrame() {
super("My Window Title");
...
}
}
解决方法
我正在处理一个扩展的类JFrame
。
这不是我的代码,它super
在开始构造GUI之前先进行调用。我想知道为什么要这样做,因为我一直只访问超类的方法而不必调用super()
;
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()错误
尝试使用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()错误的相关信息,请在本站寻找。
本文标签: