在构造函数python中使用私有方法

Posted

技术标签:

【中文标题】在构造函数python中使用私有方法【英文标题】:using private method in your constructor python 【发布时间】:2020-07-24 03:42:15 【问题描述】:

我对@9​​87654324@ 中的OOP 很陌生,我喜欢它的工作方式。所以我用它做了很多实验。我正在尝试构建一个Freelancer class,它允许用户使用username 在平台上注册,但会检查数据库中是否不存在username

这是我的工作方法:

class Freelancer:
    """Leaving this blank for now while I explore the functionality """
    number_of_sales = 0
    available_niches = ["Graphic design", "Art", "Data Analysis", "Music", "Business", "Writing and Translations"]
    usernames = []

    def __init__(self, username):
        self.username = _check_username(username)

    def _check_username(self, username):
        if self.username in Freelancer.usernames:
            print("This username already exist on our database, consider choosing another one")
        else:
            self.username = username
            Freelancer.usernames.append(self.username)
            print("You have successfully setup a username on our platform")

在这里测试这个类和方法:

David = Freelancer("dave23")

给我以下错误:

NameError: name '_check_username' is not defined

我想在我的class initialization 中应用private methods。这可能吗?

【问题讨论】:

需要:self.username = self.__check_username(username) 即需要“自我”。 call methods within class。需要__(即双破折号)将方法设为私有Private Methods 太棒了!谢谢! 【参考方案1】:

在调用私有方法之前你错过了自己。

def __init__(self, username):
    self.username = self._check_username(username)

如果它仍然给出如下错误:“Freelancer”对象没有属性“用户名” 定义用户名变量

【讨论】:

需要双下划线来使方法私有化,否则它仍然可以被公共访问,即bill = Freelancer('bill'); bill._check_username('bill')works see

以上是关于在构造函数python中使用私有方法的主要内容,如果未能解决你的问题,请参考以下文章

Java中私有构造函数有啥用?

如果构造函数在私有部分,为啥我们不能创建对象?

如何限制开发人员使用反射访问Java中的私有方法和构造函数?

不可变类/对象、私有构造函数、工厂方法

Kotlin 中的私有构造函数

抽象类与私有构造函数