小编Ell*_*ron的帖子

像dict一样运行的python类

我想写一个行为类似的自定义类dict- 所以,我继承自dict.

但我的问题是:我是否需要dict在我的__init__()方法中创建一个私有成员?我没有看到这一点,因为我已经有了dict行为,如果我只是继承dict.

任何人都可以指出为什么大多数继承片段看起来像下面的那样?

class CustomDictOne(dict):
   def __init__(self):
      self._mydict = {} 

   # other methods follow
Run Code Online (Sandbox Code Playgroud)

而不是更简单......

class CustomDictTwo(dict):
   def __init__(self):
      # initialize my other stuff here ...

   # other methods follow
Run Code Online (Sandbox Code Playgroud)

实际上,我认为我怀疑这个问题的答案是用户不能直接访问你的字典(即他们必须使用你提供的访问方法).

但是,阵列访问运算符[]呢?如何实现这一点?到目前为止,我还没有看到一个显示如何覆盖[]运算符的示例.

因此,如果[]自定义类中未提供访问函数,则继承的基本方法将在不同的字典上运行?

我尝试了以下代码片段来测试我对Python继承的理解:

class myDict(dict):
    def __init__(self):
        self._dict = {}

    def add(self, id, val):
        self._dict[id] = val


md = myDict()
md.add('id', 123)
print md[id]
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

KeyError:<内置函数id>

上面的代码有什么问题?

如何更正类,myDict以便我可以编写这样的代码? …

python dictionary

97
推荐指数
8
解决办法
11万
查看次数

在C++跨平台上解析url的简单方法?

我需要解析一个URL,以便在我用C++编写的应用程序中获取协议,主机,路径和查询.该应用程序旨在跨平台.我很惊讶我在boostPOCO库中找不到任何这样的功能.这是显而易见的我不看的地方吗?关于适当的开源库的任何建议?或者这是我必须自己做的事情?它并不是非常复杂,但似乎是一项常见的任务,我很惊讶没有一个共同的解决方案.

c++ url uri

67
推荐指数
9
解决办法
8万
查看次数

Google'Omaha'(他们的Chrome自动更新引擎)的体验是什么?

Google已将谷歌Chrome中使用的自动更新机制开源为奥马哈.

对于任何不是谷歌的人来说,配置似乎相当复杂和困难.在项目中使用奥马哈的经验是什么?可以推荐吗?

google-chrome auto-update

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

Haskell - "'do'结构中的最后一个语句必须是一个表达式"

就像它在标题中所说:什么The last statement in a 'do' construct must be an expression意思?我结束了我的do块,putStrLn就像我在几个例子中看到的那样,我得到了一个错误.

码:

main = do args <- getArgs
           file <-readFile "TWL06.txt"
           putStrLn results
Run Code Online (Sandbox Code Playgroud)

io syntax monads haskell

15
推荐指数
3
解决办法
2万
查看次数

在像MonceptT IO这样的monad堆栈中管理资源的最佳方法是什么?

无论好坏,Haskell流行的Servant库使得在monad变换器堆栈中运行代码变得很普遍ExceptT err IO.仆人自己的处理程序monad是ExceptT ServantErr IO.正如许多人所说,这是一个有点麻烦的monad工作,因为有多种方法可以展开失败:1)通过IO基地的正常例外,或2)返回Left.

正如Ed Kmett的exceptions图书馆有助于澄清:

基于连续的monad和诸如ErrorT e IO提供多种故障模式的堆栈是this [ MonadMask]类的无效实例.

这非常不方便,因为MonadMask我们可以访问有用的[多态版本] bracket函数来进行资源管理(不会因异常而泄漏资源等).但是在Servant的Handlermonad我们不能使用它.

我对它不是很熟悉,但是有些人说解决方案是使用monad-control它和许多合作伙伴库一样,lifted-base并且lifted-async让你的monad访问资源管理工具bracket(大概这适用于ExceptT err IO和朋友一样?).

然而,似乎monad-control失去了在社会上赞成,但我不能告诉替代将是什么.即使Snoyman最近的safe-exceptions图书馆使用Kmett的exceptions库也避免了monad-control.

有人可以为像我这样试图为严重的Haskell使用方式的人们澄清当前的故事吗?

resources haskell exception-handling monad-transformers io-monad

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

如何在使用fstream打开文件时截断文件

我知道可以截断一个文件

std::fstream fs(mypath, std::fstream::out | std::fstream::trunc);
Run Code Online (Sandbox Code Playgroud)

但我需要读取文件,截断它,然后用相同的文件句柄写所有内容(所以整个操作是原子的).任何人?

c++ fstream std

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

从C调用Haskell导出时垃圾收集器何时运行?

当导出要从C调用的Haskell函数时,何时收集Haskell的垃圾?如果C拥有main,则无法预测下一次调用Haskell.在运行单线程Haskell或没有并行GC时,这个问题尤为重要.

garbage-collection haskell ffi ghc

10
推荐指数
1
解决办法
413
查看次数

如何实现记住上一个构建目标的Makefile?

假设你有一个带有两个伪目标的Makefile,'all'和'debug'.'debug'目标用于构建与'all'相同的项目,除了一些不同的编译开关(例如-ggdb).由于目标使用不同的编译开关,如果在两者之间切换,显然需要重建整个项目.但GNUmake自然不会认识到这一点.

所以,如果你输入,make all你会得到

Building ...
...
Run Code Online (Sandbox Code Playgroud)

如果你打字make debug,你就得到了

make: Nothing to be done for `debug'.
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:你如何在Makefile中实现一个干净的解决方案,注意到最后一个构建使用了不同的伪目标或不同的编译开关,而不是你想要的那个?如果它们不同,Makefile将重建所有内容.

makefile gnu-make target

6
推荐指数
1
解决办法
695
查看次数

简单的多线程Haskell的大量内存消耗

我有一个相对简单的"复制"程序,它只是将一个文件的所有行复制到另一个文件.我玩弄Haskell的并发支持TMQueueSTM所以我想我会尝试这样的:

{-# LANGUAGE BangPatterns #-}

module Main where

import Control.Applicative
import Control.Concurrent.Async              -- from async
import Control.Concurrent.Chan
import Control.Concurrent.STM (atomically)
import Control.Concurrent.STM.TMQueue        -- from stm-chans
import Control.Monad (replicateM, forM_, forever, unless)
import qualified Data.ByteString.Char8 as B
import Data.Function (fix)
import Data.Maybe (catMaybes, maybe)
import System.IO (withFile, IOMode(..), hPutStrLn, hGetLine)
import System.IO.Error (catchIOError)

input  = "data.dat"
output = "out.dat"
batch = 100 :: Int

consumer :: TMQueue B.ByteString -> IO ()
consumer q = withFile output WriteMode …
Run Code Online (Sandbox Code Playgroud)

queue multithreading haskell ghc

6
推荐指数
1
解决办法
384
查看次数

在Boost :: test中报告异常

使用boost::test框架,有没有办法检测是否从函数抛出异常(某种类型)?

c++ boost-test

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