【发布时间】:2020-08-29 00:24:56
【问题描述】:
在 MATLAB 代码中,我有一个用各种属性块定义的类。下面是一个例子:
properties (GetAccess = public, SetAccess = private)
c = 0.3;
MACHINE_PRECISION = 1e-16;
end
我想将类定义转换为其 python 版本,保持与 MATLAB 中相同的属性访问规范,即公共、私有或受保护。现在,一种方法是在名称前使用下划线。例如:
__c = 0.3
__MACHINE_PRECISION = 1e-16
不幸的是,我需要保持相同的名称,因为这些类定义在其他地方使用,并且必须保持相同的名称。有没有办法绕过这个障碍,即指定类属性的访问权限而不必更改它们的名称?
【问题讨论】:
-
__name*不是访问说明符。 Python 没有访问说明符。 一切本质上都是公开的。 没有公共、私有或受保护的。通过约定将变量标记为非公共 API 的一部分,您可以使用单个下划线. -
另外:“不幸的是,我需要保持相同的名称,因为这些类定义在其他地方使用,并且必须保持相同的名称。”这没有多大意义 应该是私有属性.
-
实例变量或任何子类中不需要私有属性。更具体地说,在类定义中,我有公共和私有属性。私有属性用于类定义中的方法,我不希望这些属性出现在类的对象中。
-
“在类定义中的方法中使用,我不希望这些属性出现在类的对象中”:我认为没有黑魔法你不能用 python 做到这一点。您不能“指定类属性的访问权限”,句号。名字无关紧要。
-
@AndrasDeak 更具体地说,我不想要只读变量。我也想要私有变量。我刚刚展示了一个只读变量的示例,希望在 python 中为访问修饰符获得一些通用语法,类似于 MATLAB 或 Java。但是现在我看到python中没有这样的数据封装。
标签: python python-3.x matlab access-specifier