我已经读过可以在Python中向现有对象(即,不在类定义中)添加方法.
我知道这样做并不总是好事.但是人们怎么可能这样做呢?
在Java中,您可以使用匿名内部类定义新的内联类.当您只需要重写该类的单个方法时,这非常有用.
假设您要创建一个子类OptionParser,只覆盖一个方法(例如exit()).在Java中,您可以编写如下内容:
new OptionParser () {
public void exit() {
// body of the method
}
};
Run Code Online (Sandbox Code Playgroud)
这段代码创建了一个匿名类,OptionParser它只扩展和覆盖该exit()方法.
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__,所以我不知道如何获得这一权利.
有没有人能够在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
我有一个返回 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()
class Child(object):
def __init__(self):
self.obj = generateParent()
def __getattr__(self, attr):
return getattr(self.obj, attr)
Run Code Online (Sandbox Code Playgroud)