Python - 面向对象(三)公共变量,受保护变量,私有变量
2021/5/31 22:22:59
本文主要是介绍Python - 面向对象(三)公共变量,受保护变量,私有变量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
在Python的类里面,所有属性和方法默认都是公共的;但Python也可以设置受保护、私有类型的变量or方法
受保护类型的变量、方法
一般称为:protected变量
#!/usr/bin/env python # -*- coding: utf-8 -*- class protected: _protected = "受保护变量" name = "test" def test(self): print("实例属性:", self._protected) print("类属性:", protected._protected) @classmethod def class_m(cls): print("类方法中类属性:", cls._protected) def _test(self): print("受保护的方法") class protectedson(protected): def __init__(self): self._protected = "子类的受保护实例变量" print("子类实例属性:", self._protected) print("子类类属性:", protectedson._protected) if __name__ == "__main__": p1 = protectedson() p1.test() print("子类实例对象调用类属性", p1._protected) protectedson.class_m() print("类对象调用类属性", protectedson._protected) p1._test()
执行结果
子类实例属性: 子类的受保护实例变量 子类类属性: 受保护变量 实例属性: 子类的受保护实例变量 类属性: 受保护变量 子类实例对象调用类属性 子类的受保护实例变量 类方法中类属性: 受保护变量 类对象调用类属性 受保护变量 受保护的方法
知识点
- 在变量和方法前加一个下划线 _ 即可变成protected类型的变量or方法
- 父类的protected变量,子类能继承
- 实例对象能直接调用protected变量( 实例对象._protect ),类对象也能直接调用protected变量( 类对象._protect )
总的来说,和公共变量没有什么特别大的区别
私有类型的变量、方法
#!/usr/bin/env python # -*- coding: utf-8 -*- class privates: __private = "私有变量" def test(self): print("实例对象 - 类内部调用私有变量:", self.__private) print("类对象 - 类内部调用私有变量:", privates.__private) @classmethod def class_m(cls): print("类方法 - 类对象 - 类内部调用私有变量:", cls.__private) def __test(self): print("私有方法") if __name__ == "__main__": p1 = privates() p1.test() print("实例对象 - 外部调用私有变量", p1._privates__private) privates.class_m() print("类对象 - 外部调用私有变量", privates._privates__private) p1._privates__test()
执行方法
实例对象 - 类内部调用私有变量: 私有变量 类对象 - 类内部调用私有变量: 私有变量 实例对象 - 外部调用私有变量 私有变量 类方法 - 类对象 - 类内部调用私有变量: 私有变量 类对象 - 外部调用私有变量 私有变量 私有方法
知识点
- 在变量和方法前加两个下划线 __ 即可变成private类型的变量or方法
- 子类无法访问父类的私有变量、方法
- 私有变量只有本类的内部能直接调用
- But!外部真的不能访问吗?其实是可以访问的,python解释器对外会把 __私有变量 变成 _类名__私有变量 ,无论是实例对象还是类对象,都能通过 ._类名__私有变量 来调用私有变量,算是一种间接调用
总结
无论是受保护型变量还是私有变量,其实在外部还是能访问的,所以并不能真正控制属性的访问权限;
带着疑问
那我们如何才能控制属性的访问权限呢?Python给出的答案是装饰器 @property,这将在后面的篇幅中介绍
这篇关于Python - 面向对象(三)公共变量,受保护变量,私有变量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程