技术文章和资源

技术文章(时间排序)

热门类别

Python PHP MySQL JDBC Linux

Python 中的私有方法

pythonserver side programmingprogramming

在 Python 中,我们可以通过在方法名称前添加单个下划线来定义私有方法,并且与其他编程语言一样,我们无法阻止在 Python 中访问类外的私有方法。简单地说,私有方法仅在定义的类内部使用。

什么是私有方法和公共方法?

私有方法是只能在定义的类内部调用的方法,而公共方法是在类中定义的,可以在定义的类的实例上调用。

现在让我们定义私有方法,看看私有方法与公共方法有何不同。

示例

在此示例中,我们将通过在类内部定义公共方法和私有方法来创建一个基类,然后我们将检查私有方法是否可以被其他类或类外部访问。

# 基类
class Base:
# 定义公共方法
def pub(self):
print("This is Public method")
# 定义私有方法
def __priv(self):
print("This is Private method")
# 现在我们创建派生类,用于调用基类中创建的私有方法和公共方法。
class Derived(Base):
def __init__(self):
Base.__init__(self)
def call_pub(self):
# 从基类调用公共方法
print("\nInside derived class")
self.pub()
def call_priv(self):
# 调用基类的私有方法
self.__priv()

out = Base()
# 调用公共方法
out.pub()
out2 = Derived()
out2.call_pub()

输出

我们知道公共类甚至可以在类外调用,因此在输出中它返回公共方法中可用的数据。

This is Public method

Inside derived class
This is Public method

示例

在上面的例子中,我们使用派生类调用公共方法,现在我们将以同样的方式使用派生类调用基类的私有方法,然后由于私有方法不能在类外使用或不能通过其他类调用,因此将引发属性错误。

# 基类
class Base:
    # 定义公共方法
    def pub(self):
    	print("This is Public method")
    # 定义私有方法
    def __priv(self):
    	print("This is Private method")
# 现在我们正在创建派生类,用于调用在基类中创建的私有和公共方法。
class Derived(Base):
    def __init__(self):
    	Base.__init__(self)
    def call_pub(self):
    	# 从基类调用公共方法
    	print("\nInside derived class")
    	self.pub()
    def call_priv(self):
    	# 调用基类的私有方法
    	self.__priv()

out = Base()
out.__priv()

out2 = Derived()
out2.call_priv()

输出

当我们使用 Derived 类调用基类的私有方法时,将引发属性错误。

Traceback (most recent call last):
  File "/home/cg/root/16002/main.py", line 22, in <module>
    out.__priv() 
AttributeError: 'Base' object has no attribute '__priv'

示例

要调用类外的私有方法,我们有一种使用公共方法的方法。在此示例中,我们将使用类创建私有和公共方法以及另一个用于调用私有方法的公共方法。

# 创建类
class private_class:
# 创建公共方法
def pub(self):
    print("This is Public method")
    # 创建私有方法
    def __priv(self):
        print("This is Private method")
        # 使用另一个公共方法调用私有方法
        def calling_priv(self):
            self.pub()
            self.__priv()
    out = private_class()
    out.calling_priv()

输出

This is Public method
This is Private method

相关文章