我想注册一个类(不是一个实例)当它被创建。。。但没有进口。在
基本上,我想做的是:
How to auto register a class when it's defined
。。。但不必在任何地方导入已注册的类。在
问题是:在我的应用程序的某一点上,我需要运行某些系统命令(让我们坚持重新启动、停止。。。例如)。我已经创建了一个“base”(抽象的mmnnno并不真正看起来)类“Command”和一个“CommandManager”,它将接收一个包含要运行的命令的字符串,为所述命令创建适当的实例,对其进行排队并在需要时(或任何时候)分派命令。“Command”类的所有实例将覆盖实际执行命令的“execute”方法。如果我想“重新启动”,我会扩展“RebootCommand”类上的“Command”类,并覆盖对外部应用程序“shutdown-r”或“reboot”的调用的“execute”。在
最终目标是能够做一些事情,比如:
CommandManager.execute("reboot")
系统会重新启动。在
为此,必须在CommandManager内的字典中注册“reboot”字符串。该字典的键为“reboot”(字符串),值为classRebootCommand。CommandManager将收到字符串“reboot”,将转到它的“commandDictionary”,创建一个RebootCommand类的实例并调用它的execute()方法(从而重新启动系统)。在
比如:
^{pr2}$为了注册,必须创建RebootCommand类对象,为此,我必须将它导入到某个地方。但我不想。我不需要。我只需要创建RebootCommand类对象,因此它将为Command元类执行__new__
方法,这是注册发生的地方(如上面对另一个问题的回答中所详述的)。在
有办法吗?我尝试过将实际的命令(从Command继承的类)导入到__init__.py
中,但是如果我创建一个新的命令,我必须将它添加到__init__.py
中,并且我希望避免这种情况(这样,另一个程序员可以创建一个新的命令,而不必担心忘记将类添加到__init__.py
中)
以下是我的目录结构:
commands/
__init__.py
CommandManager.py
Command.py
RebootCommand.py
这里,命令和RebootCommand的内容进行注册:
#--------------- Command.py -------------------
def register(newCommand):
if newCommand and newCommand._command:
import CommandManager
CommandManager.CommandManager.registerCommand(newCommand._command, newCommand)
# Fancy registering! https://stackoverflow.com/questions/5189232/how-to-auto-register-a-class-when-its-defined
class CommandMetaClass(type):
def __new__(cls, clsname, bases, attrs):
newCommand = super(cls, CommandMetaClass).__new__(cls, clsname, bases, attrs)
register(newCommand) # here is your register function
return newCommand
class Command(object):
__metaclass__ = CommandMetaClass
_command = None
#-----------------------------------------------------
还有。。。在
#--------------- RebootCommand.py -------------------
class RebootCommand(Command.Command):
_command = "reboot"
#---------------------------------------------------
如果我打开__init__.py
并写入:
import RebootCommand
(此时将创建RebootCommand类对象
CommandMetaClass.__new__
函数运行,“reboot”注册为RebootCommand类,每个人都很高兴)
但如果可能的话,我想避免这样做(触摸__init__.py
)
我尝试过用*通配符导入,但运气不好。在
总而言之,我希望另一个想要实现新命令的程序员只需创建一个继承自Command的新类,而不必将它添加到__init__.py
我知道没有什么不能用在命令.py“如果我想从这个文件中继承更多的东西,我可以说”如果我有更多的话。在
问题是:
比特率=(千比特/1000)
这是整数除法,它给出的答案是0
您可能应该将比特率声明为double,然后执行以下操作:
比特率=(千比特/1000.00)
问题出在setKiloBits方法中:
将一个int除以一个int,结果小于1(320/1000=.32等),它将截断余数。试试这个:
然而,当你从千比特转换到比特时,我想你实际上是想乘以1000?但这取决于你的商业逻辑
编辑:正如Alpertmd所指出的,如果您想要除法,您还需要将比特率的定义更改为double
相关问题 更多 >
编程相关推荐