Python - 是否可以在另一个实例方法中定义实例方法?

时间:2018-05-09 23:41:30

标签: python oop methods

有可能做这样的事吗? (这种语法实际上不起作用)

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

如果有可能,编程实践是否可怕?我真正想要做的是根据实例的状态调用相同方法的两种变体之一(两者具有相同的名称和签名)。

1 个答案:

答案 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)