在Python中写getter和setter的正确方法是什么?

What is the proper way to write getter and setter in Python?

我是C#出身

我正在尝试编写 getter 和 setter 方法。换句话说,我正在尝试为 class.

创建属性
class ParamDefinition:
    def __init__(self, type_name):
        self.__type_name = type_name

    @property
    def get_type_name(self):
        return self.__type_name

    @get_type_name.setter
    def set_type_name(self, type_name):
        self.__type_name = type_name

    def printf(self):
        print(self.__type_name)

def test():
    compDef = ParamDefinition(None)

    compDef.type_name = "int"
    compDef.printf()

if __name__ == "__main__":
    test()

输出:

None

我的 属性 定义有什么不正确的地方?

getter 和 setter 需要同名:

class ParamDefinition:
    def __init__(self, type_name):
        self.__type_name = type_name

    @property
    def type_name(self):
        return self.__type_name

    @type_name.setter
    def type_name(self, type_name):
        self.__type_name = type_name

    def printf(self):
        print(self.__type_name)

def test():
    compDef = ParamDefinition(None)

    compDef.type_name = "int"
    compDef.printf()


if __name__ == "__main__":
    test()

输出:

int

编辑:

虽然这在技术上不是问题的一部分,但我认为我应该添加更多想法。你说你来自 C# 背景,在 C# 中,默认情况下将每个字段设置为 属性 是很正常的,因为你可以在不破坏接口的情况下添加额外的逻辑,并允许反射。

这些优势在 Python 中并不存在,正如您所见,将字段转换为 属性 所需的样板文件比在 C# 中重要得多。因此,我建议 不要 使用 Python 中的属性,直到它确实是您需要的。