面试题答案
一键面试在Python中,并没有真正意义上的私有属性和私有方法,但可以通过在属性和方法名前加双下划线 __
来模拟私有特性。
定义私有属性和私有方法的语法
- 私有属性:在属性名前加双下划线
__
,例如self.__private_attr
。 - 私有方法:在方法名前加双下划线
__
,例如def __private_method(self)
。
示例代码
class MyClass:
def __init__(self):
# 定义私有属性
self.__private_attr = 42
# 定义私有方法
def __private_method(self):
return "This is a private method"
def public_method(self):
# 在类内部访问私有属性
print(f"Accessing private attribute: {self.__private_attr}")
# 在类内部调用私有方法
result = self.__private_method()
print(f"Calling private method: {result}")
测试代码
obj = MyClass()
obj.public_method()
在上述代码中,__private_attr
是私有属性,__private_method
是私有方法。在 public_method
中,通过 self
来访问私有属性和调用私有方法。虽然Python没有严格的访问控制,但这种命名约定会让解释器对这些属性和方法进行名称改写,从而防止在类外部直接访问。例如,在类外部尝试访问 obj.__private_attr
会引发 AttributeError
,但其实通过名称改写后的形式 obj._MyClass__private_attr
还是可以访问到的,不过这种方式不推荐使用,因为名称改写的规则是内部实现细节,可能会改变。