python类中所有限定符举例分析
时间: 2023-11-08 16:56:33 浏览: 134
Python中的限定符是指用于控制类属性和方法访问权限的关键字,主要包括以下四种:
1. 公有成员:没有任何限定符,所有成员默认为公有成员,可以被类内部和类外部的所有代码访问。
2. 私有成员:使用两个下划线“__”开头的成员被称为私有成员,只能在类内部访问,类外部无法访问。
```python
class MyClass:
def __init__(self):
self.__privateVar = 0
def setPrivateVar(self, var):
self.__privateVar = var
obj = MyClass()
obj.setPrivateVar(10)
# obj.__privateVar # AttributeError: 'MyClass' object has no attribute '__privateVar'
```
3. 受保护成员:使用一个下划线“_”开头的成员被称为受保护成员,只能在类内部和子类中访问,类外部无法访问。
```python
class MyClass:
def __init__(self):
self._protectedVar = 0
def setProtectedVar(self, var):
self._protectedVar = var
class SubClass(MyClass):
def printProtectedVar(self):
print("Protected variable:", self._protectedVar)
obj = SubClass()
obj.setProtectedVar(10)
obj.printProtectedVar() # Protected variable: 10
# print(obj._protectedVar) # 这里也可以访问,但不建议这么做
```
4. 静态成员:使用装饰器“@staticmethod”或“@classmethod”声明的成员被称为静态成员,可以通过类名或对象名访问,但不能访问类的实例变量和方法。
```python
class MyClass:
staticVar = 0 # 静态变量
def __init__(self):
self.instanceVar = 0 # 实例变量
def instanceMethod(self):
print("Instance method")
@staticmethod
def staticMethod():
print("Static method")
@classmethod
def classMethod(cls):
print("Class method")
print(MyClass.staticVar)
MyClass.staticMethod()
MyClass.classMethod()
obj = MyClass()
print(obj.instanceVar)
obj.instanceMethod()
# obj.staticVar # AttributeError: 'MyClass' object has no attribute 'staticVar'
# obj.staticMethod() # AttributeError: 'MyClass' object has no attribute 'staticMethod'
# obj.classMethod() # AttributeError: 'MyClass' object has no attribute 'classMethod'
```
阅读全文