本文共 1883 字,大约阅读时间需要 6 分钟。
在Python中,可以通过在属性变量名前加上双下划线来定义属性为私有属性。私有变量只能在类中使用,在实例化的对象中不能被调用,而受保护类型的变量则可以在实例化对象中被修改和调用。
类Pub:```pythonclass Pub(): _name = 'protected类型的变量' __info = '私有类型的变量'
def _func(self): print("这是一个protected类型的方法") print(self._name) def __func2(self): print('这是一个私有类型的方法') def get(self): return self.__info
实例化对象:
```pythonp = Pub()p._name = 'changed' # 可修改print(p._name) # protected类型的变量# print(p.__info) # 报错,'Pub' object has no attribute '__info'p._func() # 这是一个protected类型的方法# p.__func2() # 报错,'Pub' object has no attribute '__func2'print(p._Pub__info) # 私有类型的变量print(p._Pub__func2()) # 这是一个私有类型的方法
注意:
- 私有变量只能在类中使用,实例化后的对象无法直接调用。- 受保护变量可以实例化后修改和调用。1. 继承可以继承父类的所有属性和方法。
2. 在继承的基础上,可以对父类方法进行修改,增加新的功能。
3. 多态:允许同一个方法产生不同的结果。例如,一个类可以有多个子类,使用isinstance()可以判断数据类型。
“开闭”原则:
- 对扩展开放:允许新增子类。 - 对修改封闭:不需要修改依赖已有类型的函数。例如:```pythonclass Animal: pass
class Dog(Animal):pass
判断实例类型:
```pythona = Animal() # Animal类型b = Dog() # Dog类型c = list() # list类型print(isinstance(b, Animal)) # Trueprint(isinstance(a, Dog)) # Falseprint(isinstance(b, Dog)) # True
子类实例也可以被视为父类实例。
1. 函数局部变量外部无法改变,属于函数的局部作用域。
例如:```pythondef func(): a = 1 _b = 2 __c = 3 print(a, _b, __c)
def func2(): _b = 5 __c = 6 print(_b, __c)
func2()func() # 输出: 1 2 3 5 6
函数内的局部变量修改不会影响外部变量。
2. 类的局部变量和类属性的访问规则:
类属性可以在类中定义,实例化后的对象可以通过对象名访问类属性。例如:```pythonclass A: name = 'wang' _age = 22 __sex = 'men' a = A()print(a.name) # wang# a.name = 'liu' 可以重新赋值,实际是创建一个新变量a.nameprint(a._age) # 22print(a.__sex) # 报错,类中没有__sex属性print(a._A__sex) # 属性只能在类中使用,实例化后的对象无法直接通过类名称访问
3. 非局部变量(nonlocal)和全局变量:
- 非局部变量可以在内部函数中使用上层函数的变量。 - 全局变量可以在任何层次的函数中修改。 - 非局部变量只能在一定范围内访问上层变量。例如:```pythondef outer(): x = 10 def inner(): print(x) x += 1 print("inner:', x) inner()
outer()
转载地址:http://gxltz.baihongyu.com/