博客
关于我
Python类和函数(私有变量、私有方法、变量作用域、继承和多态)
阅读量:587 次
发布时间:2019-03-11

本文共 1883 字,大约阅读时间需要 6 分钟。

Python类

一、Python类中的私有变量和私有方法

在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/

你可能感兴趣的文章
Lua websocket长连接
查看>>
SQL 分页查询 返回总条数
查看>>
重写的特点
查看>>
【数据库】MySQL导入文件与导出文件
查看>>
计算机网络UDP协议和TCP协议
查看>>
Linux运行C语言文件
查看>>
C字符串高级
查看>>
2010-03-25 函数题
查看>>
C语言_动态内存分配练习
查看>>
Linux学习_系统进程概念
查看>>
七层网络模型(待添加)
查看>>
考研复试——KY276 Problem C
查看>>
老鸟带你画tiled lines
查看>>
MybatisPlus自定义Sql实现多表查询
查看>>
Java位运算,负数的二进制表示形式,int类型最大值为什么是2的31次方-1
查看>>
PyQt5快速上手基础篇10-QSettings用法
查看>>
JQuery--手风琴,留言板
查看>>
VUE框架应用包---------微信二维码应用
查看>>
MFC 自定义消息发送字符串
查看>>
goahead 下goaction测试与搭建
查看>>