Python中的私有属性与私有方法

这篇具有很好参考价值的文章主要介绍了Python中的私有属性与私有方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于Python中的私有属性和私有方法

Python对于类的成员没有严格的访问控制限制,这与其他面相对对象语言有区别。关于私有属性和私有方法,有如下要点:

1、通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public);
2、类内部可以访问私有属性(方法);
3、类外部不能直接访问私有属性(方法);
4、类外部可以通过 _类名__私有属性(方法)名访问私有属性(方法)

定义私有属性/方法

class Demo:
    __price = 25.8

    def __init__(self, u_name, u_age):
        self.uname = u_name
        self.__uage = u_age

    def __age(self):
        print("这是私有方法")
        print("调用共有属性:", self.uname)
        print("调用私有属性:", self.__uage)
        print("调用私有类属性:", self.__price)

    def name(self):
        print("这是公有方法")
        print("调用共有属性:", self.uname)
        print("调用私有属性:", self.__uage)
        print("调用私有类属性:", self.__price)

使用 dir()函数可以查看对象内的所有的属性和方法

在 python 中任何东西都是对象,一种数据类型,一个模块等,都有子集的属性和方法,除了常用的方法外,其他的你不需要全部记住它,交给 dir() 函数就好了。

d = Demo('Tom', 18)
print(dir(d))
"""
['_Demo__age', '_Demo__price', '_Demo__uage', '__class__', '__delattr__', '__dict__', 
'__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',  '__str__', 
'__subclasshook__', '__weakref__', 'name', 'uname']
"""

这些打印出来的属性(方法)是可以直接调用的。从打印的结果可以看到,私有属性 __age()__price__uage 这三个私有属性(方法)都变成了 _Demo__age, _Demo__price, _Demo__uage,也就可以看出,私有属性(方法)在Python中是不允许直接去调用的,类外部可以通过 ”_类名__私有属性(方法)名“ 访问私有属性(方法)

调用属性(方法)

# 调用共有方法
d.name
"""
这是公有方法
调用共有属性: Tom
调用私有属性: 18
调用私有类属性: 25.8
"""
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:153708845
# 调用私有方法(错误示范)
d.__age()
"""
Traceback (most recent call last):
  File "D:/Local/PycharmProjects/private_obj/demo.py", line 32, in <module>
    d.__age()
AttributeError: 'Demo' object has no attribute '__age'
"""

# 调用私有方法(正确示例)
d._Demo__age()
d._Demo__
"""
这是私有方法
调用共有属性: Tom
调用私有属性: 18
调用私有类属性: 25.8
"""

# 调用私有属性
print(Demo._Demo__price) # 25.8
print(d._Demo__uage) # 18

【注】方法本质上也是属性!只不过是可以通过()执行而已。文章来源地址https://www.toymoban.com/news/detail-856733.html

到了这里,关于Python中的私有属性与私有方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【从零学习python 】63.正则表达式中的re.Match类及其属性和方法介绍

    当我们调用 re.match 方法、 re.search 方法,或者对 re.finditer 方法的结果进行迭代时,拿到的数据类型都是 re.Match 对象。 这个类里定义了相关的属性,可以直接让我们来使用。 属性和方法 说明 pos 搜索的开始位置 endpos 搜索的结束位置 string 搜索的字符串 re 当前使用的正则表达

    2024年02月11日
    浏览(56)
  • python中的os.mkdir和os.makedirs的使用区别,以及如何查看某个模块中的某些字母开头的属性方法

    os.mkdir(dir_name) :用于 新建文件夹 ,当要新建的文件夹已经存在的时候,就会报错: FileExistsError: [Errno 17] File exists: 因此,我们一般在新建一个文件夹的时候,会和 os.path.exists() 集合使用,如下: 1、判断一个 文件夹是否存在 ,如果不存在就新建它,如果已经存在就跳过:

    2023年04月08日
    浏览(53)
  • 关于unity中碰撞盒Collider2D中的Layer Overrides属性

    层碰撞矩阵 edit -》 project settings -》physics 2d 配置好一个GameObject之后,设置它的Layer 仅给当前Collider添加可碰撞的额外层。所以当前Collider发生碰撞or触发的层为: 层碰撞矩阵 + include layers 。 仅给当前Collider移除可碰撞的额外层。当前碰撞层级: 层碰撞矩阵 - exclude Layers 。 默

    2024年04月27日
    浏览(38)
  • Python 私有变量和私有方法介绍

    关于 Python 私有变量和私有方法,通常情况下,开发者可以在方法或属性名称前加上单下划线(_),以表示该方法或属性仅供内部使用,但这只是一种约定,并没有强制执行禁止外部访问。要真正实现“私有”的效果,可以在方法或属性名称前加上双下划线(__),在 Python

    2024年02月08日
    浏览(28)
  • 探秘C#中的秘密通道:五种引人注目的方法调用内部或私有方法

    在 C# 中,可以使用不同的方法调用内部或私有方法。下面分别介绍通过反射、MethodInfo.CreateDelegate、表达式(树)、动态方法(call)、动态方法(calli)这五种方法。 使用反射可以访问和调用内部或私有方法。 通过 MethodInfo.CreateDelegate 方法可以创建委托,然后调用私有方法

    2024年02月05日
    浏览(54)
  • 【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )

    在下面的 Python 类 Student 中 , 定义了私有的成员变量 , 该私有成员变量 , 只能在类内部进行访问 , 类的外部无法进行访问 ; 在 类外部 创建的 Student 实例对象 , 是无法访问 __address 私有成员的 ; 使用 实例对象 访问 类的私有成员 , 编译时不会报错 , 但是运行时会报错 最后一行代

    2024年02月13日
    浏览(49)
  • vuejs清空表单数据、删除对象中的空属性公共方法

    对于复杂数据,使用element自带的方法可能不能满足我们的需求,所以可以封装一个公共方法在全局。 一、清空表单数据: 二、删除对象中的空属性:

    2024年02月13日
    浏览(43)
  • 微信小程序之调用子组件中的属性或方法

    不能使用标签选择器,否则返回的是null 在自定义组件中,声明了类名选择器或者是id选择器,在父组件中用this.selectComponent(class或id)去关联 ,就可以使用子组件的属性和方法呢! 父组件的.JS文件中 zujian  class=\\\"名字\\\" id =“名字”  /zujian 然后在父组件的.wxml中的触发函数中

    2024年02月11日
    浏览(40)
  • Net 如何获取私有属性

      .Net的私有属性、成员变量、方法,都可以通过反射获取调用,当然正常我们不会这么操作 此章只是做一个反射科普,像EFCore从数据库取值的底层框架就是通过反射直接操作私有的成员变量,而不是方法。 直接上例子,先定义一个类 然后利用反射,获取到私有的password信息

    2024年02月06日
    浏览(22)
  • Selenium WebElement: Selenium 中的页面元素以及常用的属性和方法

    官方文档 本文是基于 Pytohn-3.7.4 以及 selenium-4.11.2 进行测试的,可以直接通过 pip 命令安装 selenium : 进入 python 交互界面,引入 selenium 包,检查安装结果: 在准备好 Python 环境之后,还需要安装浏览器程序, selenium 通过浏览器驱动的可执行文件对浏览器进行操作。 Windows 可以

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包