博客
关于我
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/

你可能感兴趣的文章
小程序form表单里面buton点击事件失效
查看>>
微信小程序placeholder设置自定义样式
查看>>
spring-day01
查看>>
spring的值注入与组件扫描
查看>>
C#跨窗体程序调用方法的具体操作
查看>>
C#中创建Android项目
查看>>
统计学之变异系数与是非标志
查看>>
关于继承的一些基本知识
查看>>
抖音发布黄金时间段,抖音上热门最佳时间
查看>>
我的图床~
查看>>
Thymeleaf sec:authorize 标签不生效
查看>>
Iterable与Iterator
查看>>
Python机器学习(六十五)Matplotlib 入门
查看>>
关于WebView当前地址问题的疑惑
查看>>
Python机器学习(九十二)Pandas 统计
查看>>
SecSolar:为代码“捉虫”,让你能更专心写代码
查看>>
Trying to construct an instance of an invalid type
查看>>
1965 - 2019 年最流行的编程语言变化
查看>>
链上钱包的博彩雷区
查看>>
GRUB2
查看>>