相关疑难解决方法(0)

使用多重继承调用父类__init__,这是正确的方法吗?

假设我有一个多继承场景:

class A(object):
    # code for A here

class B(object):
    # code for B here

class C(A, B):
    def __init__(self):
        # What's the right code to write here to ensure 
        # A.__init__ and B.__init__ get called?
Run Code Online (Sandbox Code Playgroud)

有写作两种典型的方法C__init__:

  1. (老式) ParentClass.__init__(self)
  2. (新样式) super(DerivedClass, self).__init__()

但是,在任何一种情况下,如果父类(AB)不遵循相同的约定,则代码将无法正常工作(某些可能会被遗漏,或被多次调用).

那么又是什么样的正确方法呢?很容易说"只是保持一致,遵循一个或另一个",但如果AB来自第三方图书馆,那么呢?有没有一种方法可以确保所有父类构造函数被调用(并且以正确的顺序,只有一次)?

编辑:看看我的意思,如果我这样做:

class A(object):
    def __init__(self):
        print("Entering A")
        super(A, self).__init__()
        print("Leaving A")

class B(object):
    def __init__(self):
        print("Entering B")
        super(B, self).__init__()
        print("Leaving B")

class …
Run Code Online (Sandbox Code Playgroud)

python oop inheritance multiple-inheritance super

138
推荐指数
4
解决办法
6万
查看次数

Python threading.timer - 每隔'n'秒重复一次

我对python计时器有困难,非常感谢一些建议或帮助:D

我不太了解线程如何工作,但我只是想每0.5秒触发一次函数,并能够启动和停止并重置计时器.

但是,RuntimeError: threads can only be started once当我执行threading.timer.start()两次时,我会继续得到.有没有解决这个问题?我threading.timer.cancel()在每次开始前尝试申请.

伪代码:

t=threading.timer(0.5,function)
while True:
    t.cancel()
    t.start()
Run Code Online (Sandbox Code Playgroud)

python python-2.7 python-3.x

75
推荐指数
6
解决办法
16万
查看次数

如何避免在Django中运行两次的AppConfig.ready()方法

我想在Django服务器启动时执行一些代码,但我希望它只运行一次.目前,当我启动服务器时,它执行了两次.文档说这可能发生,并且:

您应该在AppConfig类上放置一个标志,以防止重新运行应该执行一次的代码.

知道怎么做到这一点?下面的打印声明仍然执行两次.

from django.apps import AppConfig
import app.mqtt
from apscheduler.schedulers.background import BackgroundScheduler

class MyAppConfig(AppConfig):
    name = 'app'
    verbose_name = "HomeIoT"
    run_already = False

    def ready(self):
        if MyAppConfig.run_already: return
        MyAppConfig.run_already = True
        print("Hello")
Run Code Online (Sandbox Code Playgroud)

python django

34
推荐指数
4
解决办法
5550
查看次数