相关疑难解决方法(0)

Python的super()如何与多重继承一起工作?

我是Python面向对象编程的新手,我很难理解super()函数(新样式类),尤其是涉及多重继承时.

例如,如果你有类似的东西:

class First(object):
    def __init__(self):
        print "first"

class Second(object):
    def __init__(self):
        print "second"

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__()
        print "that's it"
Run Code Online (Sandbox Code Playgroud)

我没有得到的是:Third()该类是否会继承构造函数方法?如果是,那么将使用super()运行哪一个?为什么?

如果你想运行另一个怎么办?我知道它与Python方法解析顺序(MRO)有关.

python multiple-inheritance

825
推荐指数
14
解决办法
30万
查看次数

猴子修补与部分功能

我正在尝试SomeClass从导入的包中对一个方法进行monkeypatch :

from somepackage import SomeClass

def newmethod(obj, node, **kwargs):
    """ """

SomeClass.oldmethod = newmethod
Run Code Online (Sandbox Code Playgroud)

在哪里objnode在默认调用签名SomeClass.oldmethod:

class SomeClass(object):

    def oldmethod(obj, node):
        """ """  
Run Code Online (Sandbox Code Playgroud)

我知道monkeypatching不是一个好习惯,但我们需要一个解决方法,同时我们解决了一些无法解决的问题.上面的方法很有效,但是我们想用部分函数来做这件事.例如:

from functools import partial
newmethod_a = partial(newmethod, foo='a')
newmethod_b = partial(newmethod, foo='b')
Run Code Online (Sandbox Code Playgroud)

调用部分函数是因为我们需要传递不同的**kwargs.但是当我现在尝试超载时:

SomeClass.oldmethod = newmethod_a
Run Code Online (Sandbox Code Playgroud)

我得到一个与传递的参数数量相关的错误,但它非常特定于我的问题所以粘贴它可能没有帮助...我认为错误与oldmethod采取两个位置参数(obj, node)和我的部分的调用签名有关功能不传递到一基准objnode正确.我尝试了不同的结构,如:

newmethod_a = partial(SomeClass.newmethod, foo='a')
Run Code Online (Sandbox Code Playgroud)

对不起,我无法生成一个最小的工作示例.我希望也许专家会从经验中认识到这个问题,并告诉我,如果我在尝试的范围内甚至是可能的partial.

谢谢

python monkeypatching partials

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

避免必须明确包含函数参数

我的代码看起来像这样:

import requests
s = requests.Session()
r = s.get(a, verify=False)
r = s.get(b, verify=False)
r = s.get(c, verify=False)
r = s.get(d, verify=False)
r = s.get(e, verify=False)
r = s.get(f, verify=False)
r = s.get(g, headers={"a":"b"}, verify=False)
r = s.post(h, data={"a","b"},verify=False)
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免必须一直明确写verify=False

python python-3.x

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