python类私有函数的使用方法

  • Post category:Python

让我们来详细讲解Python类私有函数的使用方法的完整攻略。

什么是Python类私有函数?

Python类中的私有函数是指在函数名前面加上双下划线__的函数。私有函数在类的外部不能被访问,只有在类的内部才能被访问。

如何使用Python类私有函数?

使用Python类私有函数非常简单,只需要在函数名前面加上双下划线即可。下面我们给出一个例子来说明。

class MyClass:
    def __init__(self):
        self.__private = "私有变量"

    def public(self):
        print("公共方法")

    def __private_method(self):
        print("私有方法")

my_class = MyClass()
my_class.public() # 输出:公共方法
my_class.__private_method() # 报错!'MyClass' object has no attribute '__private_method'

可以看到,在上述代码中,我们使用了一个私有变量__private和一个私有方法__private_method。在类的内部,我们可以通过self.__privateself.__private_method()来访问这些私有成员。但是,在类的外部,我们不能直接访问这些私有成员。例如,my_class.__private_method()会报错。

要想在类的外部访问私有成员,我们可以通过提供公共方法的方式来实现。例如,我们可以在上述代码中添加一个公共方法get_private_method来让外部代码调用__private_method

class MyClass:
    def __init__(self):
        self.__private = "私有变量"

    def public(self):
        print("公共方法")

    def __private_method(self):
        print("私有方法")

    def get_private_method(self):
        self.__private_method()

my_class = MyClass()
my_class.public() # 输出:公共方法
my_class.get_private_method() # 输出:私有方法

在上述代码中,我们添加了一个公共方法get_private_method,这个方法内部直接调用了私有方法__private_method

代码实例说明

下面我们给出两个代码实例来说明Python类私有函数的使用方法。

实例 1:使用私有方法实现封装

在下面的代码中,我们定义了一个Person类,这个类有两个私有变量__name__age,以及三个公共方法set_nameset_ageintroduce。在公共方法中,我们使用self.__nameself.__age来访问私有变量,实现了对私有变量的封装。这样,外部代码就不能直接访问这些私有变量,可以通过公共方法来操作。

class Person:
    def __init__(self):
        self.__name = ""
        self.__age = 0

    def set_name(self, name):
        self.__name = name

    def set_age(self, age):
        if age > 0:
            self.__age = age

    def introduce(self):
        print("My name is %s, I'm %d years old." % (self.__name, self.__age))

person = Person()
person.set_name("Tom")
person.set_age(18)
person.introduce() # 输出:My name is Tom, I'm 18 years old.

实例 2:使用私有方法实现单例模式

在下面的代码中,我们定义了一个Singleton类,这个类使用私有方法__new__创建了一个单例对象。在这个类的内部,我们使用了一个__instance变量来保存这个单例对象。

class Singleton:
    __instance = None

    def __new__(cls):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
        return cls.__instance

singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 == singleton2) # 输出:True

可以看到,在上述代码中,我们通过singleton1 = Singleton()singleton2 = Singleton()分别创建了两个对象,但是这两个对象是相等的。这是因为,我们在Singleton类中使用了私有方法__new__来创建单例对象,这个方法只会在第一次创建对象的时候调用,后续再次创建对象时都会返回同一个单例对象。这样,我们就通过私有方法实现了一个简单的单例模式。