小编scr*_*Dog的帖子

使用super调用多个父类的init?

可能重复:
Super可以处理多重继承吗?

Python继承?我有一个类结构(下面),并希望子类调用__init__父双方.这可能是以"超级"方式做的还是只是一个可怕的想法?

class Parent1(object):
    def __init__(self):
        self.var1 = 1

class Parent2(object):
    def _init__(self):
        self.var2 = 2

class Child(Parent1, Parent2):
    def __init__(self):
        ## call __init__ of Parent1
        ## call __init__ of Parent2
        ## super(Child, self).__init__()
Run Code Online (Sandbox Code Playgroud)

python init multiple-inheritance super new-style-class

14
推荐指数
3
解决办法
1万
查看次数

Python del如果在一行中的字典中

在下面做一个单行的方式吗?

myDict = {}
if 'key' in myDic:
    del myDic['key']
Run Code Online (Sandbox Code Playgroud)

谢谢

python dictionary del

11
推荐指数
1
解决办法
3667
查看次数

每个循环调用python list __iter__方法?

我正在尝试创建一个继承自python列表的类.我希望列表的每个循环初始化/最终确定列表的元素.我认为这可以通过覆盖__iter__python列表的方法来完成,但我似乎无法让它工作.该__iter__方法似乎只调用一次?(见下文)

class MyList(list):
    def __iter__(self):
        print 'do something'
        return list.__iter__(self)

my_list = MyList(range(10))
print my_list

for item in my_list:
    print item
Run Code Online (Sandbox Code Playgroud)

产量

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
do something
0
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)

知道如何实现我想做的事吗?

python iterator loops python-2.6

9
推荐指数
2
解决办法
1万
查看次数

C++继承成员函数使用静态变量

我试图将一些Python类转换为c ++但是遇到了一些麻烦.我有一个Base类,它有一个类(静态)变量和一个返回它的方法.我也有一个派生类,它会覆盖类(静态)变量,如此,

在Python中:

class Base:
   class_var = "Base"
   @classmethod
   def printClassVar(cls):
      print cls.class_var

class Derived(Base):
   class_var = "Derived"

d = Derived()
d.printClassVar()
Run Code Online (Sandbox Code Playgroud)

它打印出所需的派生类变量"Derived".知道如何在c ++中获得相同的功能吗?我已经尝试但最终获得Base类的类变量.

在c ++中

class Base
{
public:
    static void printStaticVar(){cout << s_var << endl;}
    static string s_var;
};
string Base::s_var = "Base";

class Derived : public Base
{
public:
    static string s_var;
};
string Derived::s_var = "Derived";

void main()
{
    Derived d;
    d.printStaticVar();
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance static-members

5
推荐指数
1
解决办法
553
查看次数

django 测试:如何启动可以访问测试数据库的后台进程?

我正在尝试使用 django 测试框架编写测试,该测试产生了一个可以访问测试数据库的新后台进程。测试看起来像这样,

temp_project/temp_app/tests.py

import subprocess
from django.test import TestCase                                                                                                                    
from temp_app.models import TempModel

# Create your tests here.                                                                                                                             

class TempTest(TestCase):

    def setUp(self):
        TempModel.objects.create()

    def test_main(self):

        self.assertEqual(str(TempModel.objects.all()) + '\n',
                     subprocess.check_output(['python', 'manage.py', 'temp_command']))
Run Code Online (Sandbox Code Playgroud)

进程简单地打印出数据库的内容,temp_project/temp_app/management/commands/temp_command.py

from temp_app.models import TempModel
from django.core.management.base import BaseCommand

class Command(BaseCommand):

    def handle(self, *args, **kwargs):
        print TempModel.objects.all()
Run Code Online (Sandbox Code Playgroud)

模型是一个空的占位符,temp_project/temp_app/models.py

from django.db import models

# Create your models here.                                                                                                                            
class TempModel(models.Model):
    pass
Run Code Online (Sandbox Code Playgroud)

但是测试的输出看起来像,

> python manage.py test
Creating test database for alias 'default'...
F
======================================================================
FAIL: …
Run Code Online (Sandbox Code Playgroud)

python django python-unittest

5
推荐指数
1
解决办法
663
查看次数

Python 模拟:如何测试递归函数的调用次数?

我有一个递归函数存在于一个名为 test_module

import requests    

def send_msg(msg, retries=0):
    try:
        # send the message here, e.g. a http request
        response = requests.get("http://www.doesnotexist98734.com")
        # if url does not exist raise an exception
    except Exception as e:
        if retries == 0:
            raise e
        else:
            return send_msg(msg, retries=retries-1)
Run Code Online (Sandbox Code Playgroud)

我的问题是如何编写一个单元测试来检查send_msg当我设置 retries = n 时函数被调用了 n 次。我正在玩模拟模块(我使用的是 python 2.7),我想我想要这样的东西,

import mock, unittest

class MyUnitTest(unittest.TestCase):

    @mock.patch('test_module.send_msg')
    def test_send_msg_tries_n_times(self, mock_send_msg):
        with self.assertRaises(Exception):
            mock_send_msg("hello", retries=3)
        self.assertEqual(mock_send_msg.call_count, 4) # initial call + 3 retries
Run Code Online (Sandbox Code Playgroud)

但是,由于我已经模拟了该函数,因此它不会调用真正的函数,因此我不会收到异常,也不会递归地调用自己...

python recursion unit-testing mocking

2
推荐指数
1
解决办法
7006
查看次数