可以在python中将静态变量声明为私有吗?

时间:2018-10-19 15:04:37

标签: python python-3.x

[STAThread]
static void Main(string[] args)
{
    const int n = 2;
    for (int i = 0; i < n; ++i)
    {
        AppDomain appDomain = AppDomain.CreateDomain("AppDomain");
        AppDomainWrapper application = appDomain.CreateInstanceAndUnwrap(typeof(AppDomainWrapper).Assembly.FullName, typeof(AppDomainWrapper).FullName) as AppDomainWrapper;
        application.openUI();
        AppDomain.Unload(appDomain);
    }
}

我需要在上述类中将静态变量(即class Applicant: applicant_id_count=1000 application_dict={ "A":0, "B":0, "C":0 } def __init__(self,applicant_name): self.__applicant_name=applicant_name self.__applicant_id=None self.__job_band=None application_dict设为私有静态变量)。还是在python中有这样的事情?

2 个答案:

答案 0 :(得分:1)

Python没有访问修饰符。如果要从实例或类外部访问实例(或类)变量,则始终可以这样做。

这表示存在使用下划线(_)的约定,大多数开发人员都遵循该约定来表示变量/方法是私有的。单个下划线是一种惯例,可以说这是一个私有变量,但实际上并不会更改访问权限。示例:

class Applicant:
    _applicant_id_count = 1000

Applicant._applicant_id_count # equals to 1000

如果出于某些原因要模拟私有变量,则可以始终使用__前缀。 Python会对变量名称进行修饰,以使它们不易不可见。示例:

class Applicant:
    __applicant_id_count=1000

当有人尝试直接访问它时,您将收到以下错误:

Applicant.__applicant_id_count
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class Applicant has no attribute '__applicant_id_count'

有人可以破解他们的方法并使用如下变量:

Applicant._Applicant__applicant_id_count # prints out 1000

您可以在此处了解更多信息:https://www.geeksforgeeks.org/private-variables-python/

答案 1 :(得分:1)

在Python中,您始终可以访问所有变量。但是,对于此类和属性的命名存在约定。您可以使用PEP 8中的__前缀(两个下划线)。 Python会对诸如__foo之类的变量名称进行修饰,以使包含它们的类之外的代码不容易看到它们。另外,如果要使用受保护的变量范围,则可以使用_前缀(一个下划线)。