我有一个类似于以下示例(非常简化)的包装器类:
class wrap(object):
def __init__(self):
self._data = range(10)
def __getitem__(self, key):
return self._data.__getitem__(key)
我可以这样使用它:
w = wrap()
print w[2] # yields "2"
我以为可以通过更改为以下内容来优化并摆脱一个函数调用:
class wrap(object):
def __init__(self):
self._data = range(10)
self.__getitem__ = self._data.__getitem__
但是,我收到
TypeError:“包装”对象不支持索引
对于print w[2]
后者的版本线。
直接调用该方法(即)print w.__getitem__(2)
在两种情况下均有效…
为什么分配版本不允许索引?
必须在类上定义特殊方法(基本上是两端都带有两个下划线的任何方法)。特殊方法的内部查找过程完全跳过了实例字典。除其他外,如果您这样做
class Foo(object):
def __repr__(self):
return 'Foo()'
__repr__
您定义的方法仅用于的实例Foo
,而不用于repr(Foo)
。
问题内容: 我正在尝试找到一种方法来实现自定义和自定义而不破坏DRY。这是我到目前为止所拥有的: 在我做这样的事情之前,它可以正常工作: 这会立即破坏所有内容,因为的方法与的方法不同。我尝试过创建一个自定义QuerySet类,并在中实现它,但最终我复制了所有方法定义。 我也发现此代码片段有效,但是我需要将额外的参数传递给,因此它无法使用,因为它严重依赖于重新定义。 有没有一种方法可以在不重新定义子
编辑1: 我目前从一个Main类调用它,如下所示: } 原文: 解释后代码如下: 我有一个带有JavaConfig的Spring应用程序,称之为主应用程序,它从库中导入另一个Spring JavaConfig类。这个导入的JavaConfig应该用一个方面包装在主应用程序中创建的任何数据源,这个方面有一个自动连接的LogDelegator。 只要主应用程序只包含一个数据源,一切都正常。但是,当我向
问题内容: 我在postgres中使用表继承,但是我用来将数据分区到子表中的触发器的行为不太正确。例如,此查询返回nil,但我希望它返回新记录的。 如果将触发器函数的返回值从更改为,则会得到所需的行为,但是随后在数据库中插入了两个相同的行。这是有道理的,因为来自触发器函数的非空返回值会导致原始语句执行,而返回NULL会导致语句停止执行。唯一索引可能会中止第二次插入,但可能会引发错误。 有什么想法如
对于Oracle池连接,我使用,但这些连接似乎在数据库中保持活动状态。今天我在连接到Oracle数据库时遇到了一个错误: ORA-12516:TNS:侦听器找不到具有匹配协议栈的可用处理程序 另外,我在dao级别使用jdk7 try-with-resources语法进行连接: 弄不清真正的问题在哪里。我应该使用c3p0而不是OracleDataSource吗?ojdbc7中是否有bug或我的代码中
问题内容: 我听过关于此主题的不同回答,那么销毁PHP会话的肯定方法是什么? 在最简单的情况下,这是否足以真正终止用户与服务器之间的会话? 问题答案: 要销毁会话,您应该采取以下步骤: 删除会话数据 使会话ID无效 为此,我将使用以下代码: 为了确保会话ID无效,您应该只允许脚本启动的会话ID。因此,设置一个标志并检查它是否被设置: 此外,您可以使用此时间戳定期交换会话ID,以缩短其寿命:
问题内容: 我需要调整动画GIF文件的大小而不破坏动画。 如何使用PHP做到这一点? 问题答案: 如果您具有imagemagick访问权限,则可以执行以下操作: 如果您没有system()访问权限,则最有可能使用imagemagick插件 注意:这可能会产生较大的文件大小,但图像尺寸较小,这是由于合并会导致图像的最佳性能下降。 这肯定比ImageMagick路线要密集得多,但从技术上讲应该是可以的