面试题答案
一键面试在Python中,并没有严格意义上像其他语言那样的公有、私有访问权限控制,而是通过约定俗成的方式来模拟。
- 公有属性和方法:
直接定义的属性和方法就是公有的,可以在类内部和外部自由访问。
class MyClass: def __init__(self): self.public_attr = "This is a public attribute" def public_method(self): return "This is a public method" obj = MyClass() print(obj.public_attr) print(obj.public_method())
- 私有属性和方法:
在Python中,在属性或方法名前加上双下划线
__
来表示私有(实际是一种名称改写机制)。- 定义私有属性和方法:
class MyClass: def __init__(self): self.__private_attr = "This is a private attribute" def __private_method(self): return "This is a private method"
- 在类内部访问私有属性和方法:
class MyClass: def __init__(self): self.__private_attr = "This is a private attribute" def __private_method(self): return "This is a private method" def access_private(self): result = self.__private_method() return result + " and " + self.__private_attr obj = MyClass() print(obj.access_private())
- 在类外部访问私有属性和方法(不推荐,但可以通过名称改写机制访问):
私有属性和方法会被Python解释器进行名称改写,实际的名称变为
_类名__属性名
或_类名__方法名
。
但这种在外部访问私有属性和方法的方式破坏了封装性,不推荐在实际代码中使用。通常应通过类提供的公有方法来间接访问私有成员。class MyClass: def __init__(self): self.__private_attr = "This is a private attribute" def __private_method(self): return "This is a private method" obj = MyClass() print(obj._MyClass__private_attr) print(obj._MyClass__private_method())