小编Ste*_*fan的帖子

抽象成员变量的Pylint错误

我有以下代码:

class A(object):
    def random_function(self):
        print self.name

    def abstract_function(self):
        raise NotImplementedError("This is an abstract class")

class B(A):
    def __init__(self):
        self.name = "Bob"
        super(B, self).__init__()

    def abstract_function(self):
        print "This is not an abstract class"
Run Code Online (Sandbox Code Playgroud)

Pylint报告错误:

ID:E1101 A.random_function:'A'的实例没有'name'成员

这是真的,但我不在乎,因为A是抽象的.有没有办法摆脱这个警告而不仅仅是压制它?

谢谢

python pylint

4
推荐指数
2
解决办法
1189
查看次数

Ruby:想要将对象用作字符串

我正在使用一个库,它使用字符串作为ID.我想创建一个可以代替这些ID的类,但看起来像是现有代码的字符串.例如,我有一个现有的测试,如下所示:

require 'test/unit'
class IdString < Hash
  def initialize(id)
    @id = id
  end

  def to_s
    @id
  end
end

class TestGet < Test::Unit::TestCase
  def test_that_id_is_1234
    id = IdString.new('1234')

    assert_match(/1234/, id)
  end
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,这失败了:

TypeError: can't convert IdString to String

有没有办法解决这个问题而不改变所有希望id为字符串的现有代码?

ruby

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

rspec:'should_receive'具有多个参数期望值

我有一个接收复杂参数(HTML字符串)的函数.我想检查有关此字符串的多个条件,即:

receiver.should_receive(:post_data).with(json_content).with(id_matching(5))
Run Code Online (Sandbox Code Playgroud)

多个with参数不起作用,任何替代方案?如果可以以某种方式制作复合匹配器,我很乐意定义自定义匹配器.

显然,我可以多次运行相同的测试并测试结果的不同内容,但这是一个需要几秒钟才能运行的集成测试,所以我不想让它更慢.

谢谢

编辑:

在撰写本文时,接受的答案(使用带有自定义描述的自定义匹配器)似乎是最佳选择.然而,它并不完美,理想情况下with会支持"这是预期类型的​​项目,但不是我们预期的那个"的概念,而不是纯二进制匹配.

ruby testing integration-testing rspec

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

程序被杀时,Linux套接字释放得太慢

编辑:tl;博士:

不要用错误的选项打开插座,它不太可能工作!

原始问题:

我正在使用一个没有干净关闭机制的程序,它只是依赖于终止它而被杀死.

它打开一个套接字如下:

(void) setsockopt(h, SOL_SOCKET, (SO_KEEPALIVE | SO_REUSEADDR), (int *) & optval, sizeof( optval ));
Run Code Online (Sandbox Code Playgroud)

重用地址选项似乎确实有效,因为程序最终会在程序死后释放.最终成为从几秒钟到一刻钟的任何东西.

这非常繁琐,因为我需要定期重启这个程序.使程序正确地发挥作用将是一项非常重要的工作,但我想知道我是否可以做更多的本地工作来提前释放套接字?

c sockets linux

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

比较python中的旋转列表

我试图比较两个列表来确定一个是否是另一个的旋转(循环置换),例如:

a = [1, 2, 3]
b = [1, 2, 3] or [2, 3, 1] or [3, 1, 2]
Run Code Online (Sandbox Code Playgroud)

都是比赛,而:

b = [3, 2, 1] is not
Run Code Online (Sandbox Code Playgroud)

为此,我有以下代码:

def _matching_lists(a, b):
    return not [i for i, j in zip(a,b) if i != j]

def _compare_rotated_lists(a, b):
    rotations = [b[i:] + b[:i] for i in range(len(b))]
    matches = [i for i in range(len(rotations)) if _matching_lists(a, rotations[i])]
    return matches
Run Code Online (Sandbox Code Playgroud)

这将构建b的所有可能旋转的列表,然后比较每个旋转.是否可以在不构建中间列表的情况下执行此操作?性能并不重要,因为列表通常只有四个项目.我主要关心的是代码的清晰度.

列表将始终具有相同的长度.

最佳答案(保持匹配轮换列表)似乎是:

def _compare_rotated_lists(a, b):
    return [i for i in range(len(b)) if …
Run Code Online (Sandbox Code Playgroud)

python readability

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

Ruby:如何从Hash填充Hash的子类

我正在创建哈希的子类,我希望能够使用哈希初始填充,即:

class HashSub < Hash
  def initialize(old_hash)
    ...
  end
end

a = HashSub.new({'akey' => 'avalue'})

puts a['akey']

>> avalue
Run Code Online (Sandbox Code Playgroud)

由于Hash.new不采用哈希,实现这一目标的最简洁方法是什么?

ruby

0
推荐指数
1
解决办法
130
查看次数

标签 统计

ruby ×3

python ×2

c ×1

integration-testing ×1

linux ×1

pylint ×1

readability ×1

rspec ×1

sockets ×1

testing ×1