看来我在编程语言设计中得到了调用栈的概念.但我找不到(可能,我只是不够努力搜索)任何堆栈帧的正确解释.
所以我想请一个人用几句话向我解释.
我正在使用MySQL版本5.1.49-1ubuntu8.1.它允许我定义两种不同数据类型的列:BOOL和BOOLEAN.这两种类型有什么区别?
__len__(self)在Python中实现方法非常容易,因此它可以处理这样的len(inst)调用:
class A(object):
def __len__(self):
return 7
a = A()
len(a) # gives us 7
Run Code Online (Sandbox Code Playgroud)
而且有很多相似的方法,你可以定义(__eq__,__str__,__repr__等).我知道Python类也是对象.
我的问题:我可以以某种方式定义,例如,__len__以便以下工作:
len(A) # makes sense and gives some predictable result
Run Code Online (Sandbox Code Playgroud) 我有一个Django项目,让我们说"project1".应用程序的典型文件夹结构是:
/project1/
/app1/
/app2/
...
__init__.py
manage.py
settings.py
urls.py
Run Code Online (Sandbox Code Playgroud)
如果我想将所有应用程序保存在某个单独的文件夹中,例如'apps',我该怎么办?所以该结构应如下所示:
/project/
apps/
app1/
app2/
...
__init__.py
manage.py
settings.py
urls.py
Run Code Online (Sandbox Code Playgroud) 让我们假设我们有一个仅在生产阶段存在的模块系统.在测试时,这些模块不存在.但我仍然想为使用这些模块的代码编写测试.我们还假设我知道如何从这些模块中模拟所有必需的对象.问题是:如何方便地将模块存根添加到当前层次结构中?
这是一个小例子.我想测试的功能放在一个名为的文件中actual.py:
actual.py:
def coolfunc():
from level1.level2.level3_1 import thing1
from level1.level2.level3_2 import thing2
do_something(thing1)
do_something_else(thing2)
Run Code Online (Sandbox Code Playgroud)
在我的测试套件中,我已经拥有了我需要的一切:我拥有thing1_mock和thing2_mock.我也有测试功能.我需要的是添加level1.level2...到当前模块系统中.像这样:
tests.py
import sys
import actual
class SomeTestCase(TestCase):
thing1_mock = mock1()
thing2_mock = mock2()
def setUp(self):
sys.modules['level1'] = what should I do here?
@patch('level1.level2.level3_1.thing1', thing1_mock)
@patch('level1.level2.level3_1.thing1', thing2_mock)
def test_some_case(self):
actual.coolfunc()
Run Code Online (Sandbox Code Playgroud)
我知道我可以替换sys.modules['level1']包含另一个对象的对象,依此类推.但对我来说似乎有很多代码.我认为必须有更简单,更漂亮的解决方案.我找不到它.
比方说,我有以下两个类:
class A(object):
def __init__(self, i):
self.i = i
class B(object):
def __init__(self, j):
self.j = j
class C(A, B):
def __init__(self):
super(C, self).__init__(self, 4)
c = C()
Run Code Online (Sandbox Code Playgroud)
c只会设置i属性,而不是j.我应该写什么来设置两个属性/只有j属性?
Python 有两种从模块导入内容的方法:
from mymodule import ClassOne, ClassTwo, ClassThree
Run Code Online (Sandbox Code Playgroud)
和
from mymodule import (ClassOne, ClassTwo, ClassThree)
Run Code Online (Sandbox Code Playgroud)
我在Python的文档中找不到任何注释(可能,我只是没有那么努力).我想知道这两种导入方式之间的显着差异.
我用D写的无限循环程序:
$ cat dprog.d
import std.stdio;
import core.thread;
void main()
{
while(1){
Thread.sleep(dur!("seconds")(1));
};
}
Run Code Online (Sandbox Code Playgroud)
当我在Linux(Ubuntu)上构建并运行该程序时,kill -10 $PID对它没有任何影响.实际上,它默认会捕获一堆信号:
$ cat /proc/$PID/status | grep SigCgt
SigCgt: 0000000180000a00
Run Code Online (Sandbox Code Playgroud)
信号10是SIGUSR1信号,其默认动作是过程终止(咨询man 7 signal).
等效程序,C语言编写的关于终止kill -10 $PID其cat /proc/$PID/status | grep SigCgt是SigCgt: 0000000000000000.
用Rust编写的等效程序也会终止kill -10 $PID,但它cat /proc/$PID/status | grep SigCgt是SigCgt: 0000000180000440.
我的问题是:D(Rust)编译器是否注册了默认的信号处理程序?如果是,为什么?此外,这是在某处记录的吗?
python ×5
callstack ×1
class ×1
d ×1
django ×1
django-apps ×1
import ×1
linux ×1
mocking ×1
mysql ×1
python-mock ×1
signals ×1
sqldatatypes ×1