在Python中,类成员有三种修饰符:公有、私有和保护。这些修饰符用于控制类成员的访问权限。
1.公有成员
公有成员是指在类定义中没有使用任何修饰符的成员。公有成员可以在类内部和外部访问。例如:
class MyClass:
def __init__(self):
self.public_var = "I am a public variable"
def public_method(self):
print("I am a public method")
my_object = MyClass()
print(my_object.public_var)
my_object.public_method()
输出:
I am a public variable
I am a public method
在上面的例子中,public_var
和public_method
都是公有成员。它们可以在类内部和外部访问。
2.私有成员
私有成员是指在类定义中使用两个下划线__
开头的成员。私有成员只能在类内部访问,不能在类外部访问。例如:
class MyClass:
def __init__(self):
self.__private_var = "I am a private variable"
def __private_method(self):
print("I am a private method")
def public_method(self):
print(self.__private_var)
self.__private_method()
my_object = MyClass()
my_object.public_method()
输出:
I am a private variable
I am a private method
在上面的例子中,__private_var
和__private_method
都是私有成员。它们只能在类内部访问,不能在类外部访问。
需要注意的是,虽然私有成员不能在类外部访问,但是可以通过一些技巧访问。例如:
class MyClass:
def __init__(self):
self.__private_var = "I am a private variable"
def __private_method(self):
print("I am a private method")
def public_method(self):
print(self.__private_var)
self.__private_method()
my_object = MyClass()
print(my_object._MyClass__private_var)
my_object._MyClass__private_method()
输出:
I am a private variable
I am a private method
在上面的例子中,我们通过类名+私有成员名的方式访问了私有变量和私有方法。这种方式虽然可以访问私有成员,但是不建议使用,因为这样做会破坏封装性,使代码变得不可维护。
3.保护成员
保护成员是指在类定义中使用一个下划线_
开头的成员。保护成员可以在类内部和子类中访问,但是不能在类外部访问。例如:
class MyBaseClass:
def __init__(self):
self._protected_var = "I am a protected variable"
def _protected_method(self):
print("I am a protected method")
class MyDerivedClass(MyBaseClass):
def public_method(self):
print(self._protected_var)
self._protected_method()
my_object = MyDerivedClass()
my_object.public_method()
输出:
I am a protected variable
I am a protected method
在上面的例子中,_protected_var
和_protected_method
都是保护成员。它们可以在类内部和子类中访问,但是不能在类外部访问。在子类中,通过继承父类的保护成员,可以实现对父类成员的访问和修改。