有可能做这样的事吗? (这种语法实际上不起作用)
class TestClass(object):
def method(self):
print 'one'
def dynamically_defined_method(self):
print 'two'
c = TestClass()
c.method()
c.dynamically_defined_method() #this doesn't work
如果有可能,编程实践是否可怕?我真正想要做的是根据实例的状态调用相同方法的两种变体之一(两者具有相同的名称和签名)。
答案 0 :(得分:2)
在方法中定义函数并不会自动使其对实例可见 - 它只是一个范围在该方法中的函数。
为了揭露它,你很想做:
public class RequestInformationModelAdapter extends JsonAdapter<RequestInformationModel> {
@Override
public RequestInformationModel fromJson(JsonReader reader) throws IOException {
Moshi moshi = new Moshi.Builder().build();
JsonAdapter<RequestInformationModel> jsonAdapter = moshi.adapter(RequestInformationModel.class);
return jsonAdapter.fromJson(reader.nextString());
}
@Override
public void toJson(JsonWriter writer, RequestInformationModel value) throws IOException {
Moshi moshi = new Moshi.Builder().build();
JsonAdapter<RequestInformationModel> jsonAdapter = moshi.adapter(RequestInformationModel.class);
writer.value(jsonAdapter.toJson(value));
}
}
只有那样不起作用:
self.dynamically_defined_method = dynamically_defined_method
您必须将该函数标记为一种方法(我们使用MethodType来完成)。因此,实现这一目标的完整代码如下所示:
TypeError: dynamically_defined_method() takes exactly 1 argument (0 given)