相关疑难解决方法(0)

将方法添加到现有对象实例

我已经读过可以在Python中向现有对象(即,不在类定义中)添加方法.

我知道这样做并不总是好事.但是人们怎么可能这样做呢?

python oop methods monkeypatching

596
推荐指数
13
解决办法
22万
查看次数

Python有没有类似Java的匿名内部类?

在Java中,您可以使用匿名内部类定义新的内联类.当您只需要重写该类的单个方法时,这非常有用.

假设您要创建一个子类OptionParser,只覆盖一个方法(例如exit()).在Java中,您可以编写如下内容:

new OptionParser () {

    public void exit() {
        // body of the method
    }
};
Run Code Online (Sandbox Code Playgroud)

这段代码创建了一个匿名类,OptionParser它只扩展和覆盖该exit()方法.

Python中有类似的习惯用法吗?在这些情况下使用哪种成语?

python class anonymous-class

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

用Python完全包装一个对象

我想完全包装一个对象,以便所有属性和方法请求转发到它包装的对象,但也覆盖我想要的任何方法或变量,以及提供我自己的一些方法.这个包装类应该作为现有类100%出现(isinstance必须表现得好像它实际上是类),但是子类化本身并不会削减它,因为我想包装一个现有的对象.Python中是否有一些解决方案可以做到这一点?我正在思考以下问题:

class ObjectWrapper(BaseClass):
    def __init__(self, baseObject):
        self.baseObject = baseObject

    def overriddenMethod(self):
        ...

    def myOwnMethod1(self):
        ...

    ...

    def __getattr__(self, attr):
        if attr in ['overriddenMethod', 'myOwnMethod1', 'myOwnMethod2', ...]
            # return the requested method
        else:
            return getattr(self.baseObject, attr)
Run Code Online (Sandbox Code Playgroud)

但我不是那个熟悉的覆盖__getattr__,__setattr__并且__hasattr__,所以我不知道如何获得这一权利.

python reflection

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

在Tensorflow中混合前馈层和复发层?

有没有人能够在Tensorflow中混合前馈层和重复层?

例如:input-> conv-> GRU-> linear-> output

我可以想象一个人可以用前馈层定义他自己的单元格而没有可以使用MultiRNNCell函数堆叠的状态,如:

cell = tf.nn.rnn_cell.MultiRNNCell([conv_cell,GRU_cell,linear_cell])

这会让生活变得更轻松......

python tensorflow recurrent-neural-network gated-recurrent-unit

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

使用父实例初始化子实例

我有一个返回 Parent 类实例的函数:

def generateParent():
   do_stuff
   return Parent(some_parameters)
Run Code Online (Sandbox Code Playgroud)

现在我想用调用的结果来初始化 Parent 的子类generateParent()

class Child(Parent):
    def __new__():
        return generateParent(some_other_parameters) 
Run Code Online (Sandbox Code Playgroud)

问题是,当我重写 Child 中 Parent 的某些方法,然后在程序中的 Child 实例中调用它们时,会调用原始 Parent 方法,而不是 Child 中的新方法。我在这里做错了什么吗?我在这里使用正确的设计来完成我的任务吗?

编辑:我无法访问 Parent 或generateParent()

解决方案(感谢@Paul McGuire的回答):

class Child(object):
    def __init__(self):
        self.obj = generateParent()

    def __getattr__(self, attr):
        return getattr(self.obj, attr)
Run Code Online (Sandbox Code Playgroud)

python inheritance initialization class

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