小编wim*_*wim的帖子

在python中用父类方法覆盖__init__

我想做以下事情(在 Python 3.7 中):

class Animal:

    def __init__(self, name, legs):
        self.legs = legs
        print(name)

    @classmethod 
    def with_two_legs(cls, name):
        # extremely long code to generate name_full from name
        name_full = name
        return cls(name_full, 2)

class Human(Animal):

    def __init__(self):
        super().with_two_legs('Human')

john = Human()
Run Code Online (Sandbox Code Playgroud)

基本上,我想__init__用父类的工厂类方法覆盖子类的方法。然而,所写的代码不起作用,并引发:

TypeError: __init__() takes 1 positional argument but 3 were given
Run Code Online (Sandbox Code Playgroud)

我认为这意味着作为变量super().with_two_legs('Human')传递。Humancls

1)为什么这不像写的那样工作?我假设super()会返回超类的代理实例,所以clsAnimal对的吗?

2)即使是这种情况,我也不认为这段代码实现了我想要的,因为 classmethod 返回 的实例Animal,但我只想以Human与 classmethod 相同的方式进行初始化,有什么方法可以实现我的行为想?

我希望这不是一个很明显的问题,我发现文件super() …

python inheritance constructor class-method

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

具有固定键、值类型的不可变/冻结字典子类

问题

与之前的问题类似,我想创建一个冻结/不可变的字典。具体来说,初始化后,用户ValueError在尝试使用__delitem____setitem__方法时应该得到一个 。

与前面的问题不同,我特别希望它成为一个子类,其中初始化类型仅限于特定的键和值类型。

尝试的解决方案

我自己尝试完成此任务collections.UserDict失败了:

class WorkflowParams(UserDict):
    def __init__(self, __dict: Mapping[str, str]) -> None:
        super().__init__(__dict=__dict)

    def __setitem__(self, key: str, item: str) -> None:
        raise AttributeError("WorkflowParams is immutable.")

    def __delitem__(self, key: str) -> None:
        raise AttributeError("WorkflowParams is immutable.")
Run Code Online (Sandbox Code Playgroud)

当尝试使用它时:

workflow_parameters = WorkflowParams(
    {
        "s3-bucket": "my-big-bucket",
        "input-val": "1",
    }
)
Run Code Online (Sandbox Code Playgroud)

它失败了

Traceback (most recent call last):
  File "examples/python_step/python_step.py", line 38, in <module>
    workflow_parameters = WorkflowParams(
  File "/home/sean/git/scargo/scargo/core.py", line 14, in __init__ …
Run Code Online (Sandbox Code Playgroud)

python dictionary immutability data-structures python-3.x

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

MySQL表更新

我有两张桌子,我想要做的很简单,但同时也很复杂 - 如果有人能帮助我那会很棒.

我有以下表格......

Table A
ClientID
1
2
3

Table B
ClientID        ID
1               
1
3
Run Code Online (Sandbox Code Playgroud)

表B在表中有ClientID,表A也是如此.所以它们链接起来,我需要做的是将ID更新为唯一引用.

即clientID-UniqueID.例如,如果我更新了表BI,则希望它看起来像这样(顺序)

Table B
ClientID            ID
1                   1-1
1                   1-2
3                   3-1
Run Code Online (Sandbox Code Playgroud)

mysql sql

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

在python中使用exclam(!)语法for factorial

可以使用类似数学的语法定义工作因子函数/运算符吗?即使用!符号.

我想不出现有符号的任何用例,其中的事情可能是模棱两可的

  • ipython !shell_escape总是在一条线的开头爆炸
  • 类似的东西0!=1True像往常一样,因为其他解释factorial(0) = 1将是SyntaxError: can't assign to literal或类似的错误)

python syntax operator-overloading factorial

0
推荐指数
2
解决办法
3347
查看次数

在 python 中使用 matplotlib 绘制直方图

我有一个包含 2 列的文件,例如:

111, 3  
122, 4  
155, 3  
192, 5  
11,  9  
123, 10  
120, 23
Run Code Online (Sandbox Code Playgroud)

我怎样才能编写类似 ((111,122,155,192,11,123,120),(3,4,3,5,9,10,23)) 的数据。现在我想做的就是使用将其绘制在直方图中matplotlib
请帮忙提供一些基本想法。!

python matplotlib histogram

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

展平可迭代的迭代

我怎样才能写出function哪些应该返回嵌套在iterable中的每个值?

这是我想要完成的一个例子:

for i in function([1, 2, [3, 4, (5, 6, 7), 8, 9], 10]):
    print(i, end=' ')
Run Code Online (Sandbox Code Playgroud)

预期产量:

1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)

python python-3.x

0
推荐指数
2
解决办法
685
查看次数

输入内部的打印语句返回“无”

我正在编写一个小程序,我想使用:

ans = int(input(print(multi,'x',num,'=')))
Run Code Online (Sandbox Code Playgroud)

这很好,除了在打印打印语句后没有提示的事实。喜欢:

49 x 7 =
None
Run Code Online (Sandbox Code Playgroud)

如果可能的话,如何删除“无”?我也确实搜索了这个问题,但是什么也没有在输入中返回空值。

python input python-3.x

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

与数据中任何合法可能性不同的关键

"计算机科学只有两个难题:缓存失效和命名事物."

- 菲尔卡尔顿

当需要一些像下面这样的逻辑时,我正在努力想出一个明智的名字THING:

THING = object()

def do_something(my_dict, my_key=THING):
    if my_key is not THING:
        # some code which accesses the dict
        my_dict[my_key]
    else:
        # some code which handles this case 
Run Code Online (Sandbox Code Playgroud)

这里我们不能None用作默认值,因为它是一个可能的数据值.我敢肯定这是一个众所周知的技巧,所以有一个众所周知的名称,一个对象可以完成这项工作THING吗?什么是更明智的名字?

python naming

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

如何在分支之间移动提交?

我有这个:

feature               D - E
                    /
develop   A - B   C
Run Code Online (Sandbox Code Playgroud)

我想要这个:

feature           C - D - E
                /
develop   A - B
Run Code Online (Sandbox Code Playgroud)

所有提交都已经推送到github.但是,它们只在我的私人分支中,所以如果我不得不重写历史,那就不是戏剧了.

什么是最简洁和/或最简单的方法来将提交C移出开发,并重新定义该功能?

git

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

排列数字列表,允许联系

可以说我有一个这样的列表:

newIndexVertList = [0, 1, 2, 2, 1, 20, 21, 21, 20, 3, 23, 22]
Run Code Online (Sandbox Code Playgroud)

我想将其转换为:

newIndexVertList = [0, 1, 2, 2, 1, 4, 5, 5, 4, 3, 7, 6]
Run Code Online (Sandbox Code Playgroud)

这里,变换基于原始列表中按升序排列的数字位置.因此,在新的列表中,数字会根据逻辑被替换:

0   -->  0    0th position in sorted list
1   -->  1    1st position in sorted list
2   -->  2    2nd position in sorted list
3   -->  3    3rd position in sorted list
20  -->  4    4th position in sorted list
21  -->  5    5th position in sorted list
22 …
Run Code Online (Sandbox Code Playgroud)

python list

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