我有以下代码:
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是抽象的.有没有办法摆脱这个警告而不仅仅是压制它?
谢谢
我正在使用一个库,它使用字符串作为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为字符串的现有代码?
我有一个接收复杂参数(HTML字符串)的函数.我想检查有关此字符串的多个条件,即:
receiver.should_receive(:post_data).with(json_content).with(id_matching(5))
Run Code Online (Sandbox Code Playgroud)
多个with参数不起作用,任何替代方案?如果可以以某种方式制作复合匹配器,我很乐意定义自定义匹配器.
显然,我可以多次运行相同的测试并测试结果的不同内容,但这是一个需要几秒钟才能运行的集成测试,所以我不想让它更慢.
谢谢
编辑:
在撰写本文时,接受的答案(使用带有自定义描述的自定义匹配器)似乎是最佳选择.然而,它并不完美,理想情况下with会支持"这是预期类型的项目,但不是我们预期的那个"的概念,而不是纯二进制匹配.
编辑:tl;博士:
不要用错误的选项打开插座,它不太可能工作!
原始问题:
我正在使用一个没有干净关闭机制的程序,它只是依赖于终止它而被杀死.
它打开一个套接字如下:
(void) setsockopt(h, SOL_SOCKET, (SO_KEEPALIVE | SO_REUSEADDR), (int *) & optval, sizeof( optval ));
Run Code Online (Sandbox Code Playgroud)
重用地址选项似乎确实有效,因为程序最终会在程序死后释放.最终成为从几秒钟到一刻钟的任何东西.
这非常繁琐,因为我需要定期重启这个程序.使程序正确地发挥作用将是一项非常重要的工作,但我想知道我是否可以做更多的本地工作来提前释放套接字?
我试图比较两个列表来确定一个是否是另一个的旋转(循环置换),例如:
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) 我正在创建哈希的子类,我希望能够使用哈希初始填充,即:
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不采用哈希,实现这一目标的最简洁方法是什么?