iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python 私有属性与私有方法
  • 462
分享到

Python 私有属性与私有方法

2024-04-02 19:04:59 462人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 场景定义2. 语法定义3. 调用分析4. python伪私有属性和私有方法1. 场景定义 私有属性: 是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的

1. 场景定义

私有属性:

是指在 Python面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问到这些属性。

即:私有属性是对象不愿意公开的属性。

私有方法:

是指在 Python 的面向对象开发过程中,对象的某些方法或者称为函数只想在对象的内部被使用,但不想在外部被访问到这些方法或函数。

即:私有方法是对象不愿意公开的方法或函数。

2. 语法定义

在 Python 中定义私有属性和私有方法的语法如下:

class Staff:
    def __init__(self, s_name, s_salary):
      self.s_name = s_name
      self.__salary = s_salary
      
    def __secret(self):
      print("%s 的工资是 %d" % (self.s_name, self.__salary))
  • (1). __salary是以两个下划线开头来定义的私有属性。
  • (2). __secret(self)是以两个下划线开头来定义的私有方法。

3. 调用分析

(1). 在__init__的对象初始化方法中,以两个下划线开头定义的__salary属性就是私有属性。

现在在对象的外部来调用一下__salary属性,看是否能正常访问该私有属性。

从上图运行结果可以看出,第11行,即在对象外部访问对象的私有属性 __salary 时,提示 AttributeError 错误,Staff 对象 zhangsan 没有属性 __salary。

为了证明 Staff 类对象确实是有__salary 这个实例属性的,只是因为在对象外部不能访问私有属性。

我把 self.__salary 修改为:self.salary__secret(self)方法对self.__salary属性的引用,做相应的修改,看如下图所示的运行结果。

可以从运行结果看出,这种非私有属性在外部的调用是正常的,没有提示 AttributeError 错误。

(2). 在__secret(self) 实例方法中,以两个下划线开头定义的__secret(self)方法就是私有方法。

和上面测试流程一样,先在对象的外部来调用私有方法__secret(self),看是否能正常调用该私有方法。

从上图运行结果可以看出,第11行,即在对象外部访问对象的私有方法__secret(self) 时,提示 AttributeError 错误,Staff 对象 zhangsan 没有 __secret 方法。

为了证明 Staff 类对象是有__secret(self)这个实例方法的,只是因为在对象外部不能访问私有方法。

我把 __secret(self) 方法修改为:secret(self),其他代码不变,看如下图所示的运行结果。

可以从运行结果看出,这种非私有方法在外部的调用是正常的,没有提示 AttributeError 错误。

(3). 从下图可以看出,在对象内部私有方法与私有属性是可以被调用的。

如图中的 work 方法调用了私有方法__secret(self),而私有方法__secret(self)调用了私有属性__salary。

在对象外部使用 Staff 类对象 zhangsan 来调用 work 方法,可以间接访问到对象的私有属性和私有方法。

从控制台输出结果来看 work 方法能正常访问到对象内部定义的私有属性和私有方法。

4. Python伪私有属性和私有方法

在 Python 中,并没有真正意义上的私有,因为 Python 内部在给属性、方法命名时,对名称做了一些特殊处理,使得外界无法访问到对应的属性和方法。

以私有属性和私有方法为例,Python内部处理方式为:

  • (1). 属性: __salary,经过处理后的属性名为:_Staff__salary(_类名__属性名)
  • (2). 方法: __secret,经过处理后的方法名为:_Staff__secret(_类名__方法名)

知道了 Python 内部对于私有属性和私有方法的处理,现在使用这种处理后的命名方式来在对象外部访问私有属性和私有方法,看是否能访问正常。

class Staff:
    def __init__(self, s_name, s_salary):
        self.s_name = s_name
        self.__salary = s_salary

    def __secret(self):
        return "%s的工资是 %d" % (self.s_name, self.__salary)


zhangsan = Staff("张三", 10000)
print(zhangsan._Staff__salary)
print(zhangsan._Staff__secret())

运行结果如下图所示:

控制台没有抛任何的异常,之前的提示 AttributeError 错误也没有了。

这个例子证明了 Python 是没有真正意义上的私有的,当知道了其内部处理方式后,依然可以使用_类名__属性名(方法名)的方法来在对象外部访问到对象内部定义的私有属性和私有方法。

但这种方式在日常工作中是不推荐使用的,既然在对象内部定义属性和方法时,就声明了其为私有的,调用方就需要遵守其规则。

到此这篇关于Python 私有属性与私有方法的文章就介绍到这了,更多相关Python私有属性与私有方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python 私有属性与私有方法

本文链接: https://www.lsjlt.com/news/140955.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python 私有属性与私有方法
    目录1. 场景定义2. 语法定义3. 调用分析4. Python伪私有属性和私有方法1. 场景定义 私有属性: 是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的...
    99+
    2024-04-02
  • 聊聊Python私有属性与私有方法
    1、 场景定义私有属性是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问到这些属性。即:私有属性是对象不愿意公开的属性。私有方法是指在 Python 的面向对象开发过程中,对象的某些方法或者...
    99+
    2023-05-14
    Python 私有属性 私有方法
  • python中的私有属性和私有方法是什么
    这篇文章给大家介绍python中的私有属性和私有方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。私有权限面向对象三大特性:封装、继承、多态封装的意义:将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;...
    99+
    2023-06-14
  • python基础知识之私有属性和私有方法
    私有权限 面向对象三大特性:封装、继承、多态 封装的意义: 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理; 隐藏内部实现细节,只需要和对象及其属性和方法交互就...
    99+
    2024-04-02
  • 如何在python中使用私有属性和私有方法
    本篇文章给大家分享的是有关如何在python中使用私有属性和私有方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python的优点有哪些1、简单易用,与C/C++、Java、...
    99+
    2023-06-14
  • JavaScript中Class私有属性与私有方法的示例分析
    小编给大家分享一下JavaScript中Class私有属性与私有方法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!pr...
    99+
    2024-04-02
  • python 公有属性和私有属性
    十三、python 公有属性和私有属性 属性: 方法: class Chinese(Person): nation = 'China' def __init__(self,name): self.__name = name def m...
    99+
    2023-01-31
    属性 python
  • 私有属性/方法的访问
    在属性/方法名前有双下划线的,称为私有属性/方法,私有属性/方法外部不能直接访问, 一般访问类的私有属性,可以通过自身调用 使用了私有属性的公有方法 间接访问私有属性/方法, 但python中并没有真正意义的私有,可以通过 _类名__属性...
    99+
    2023-01-30
    属性 方法
  • python——“破解”私有属性
    #coding:utf-8 class A:     def __init__(self, name, age, pwd):         self.__name = name         self.__age = age     ...
    99+
    2023-01-31
    属性 python
  • python私有属性和方法怎么获取
    今天小编给大家分享一下python私有属性和方法怎么获取的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
  • Python属性私有化详解
    目录前言私有化属性set和get装饰器@property前言 在做程序的过程中,有时候程序猿不想让外人动一些值,这个时候,就可以考虑把一些变量进行私有化 __属性:就是将属性私有化,...
    99+
    2023-02-08
    Python私有化 Python私有化属性
  • Python类与方法的私有化
    1. 创建自己的类学习面向对象的第一步,就是创建一个类。因为类是面向对象的基石。Python类和其他编程语言(Java、C#等)的类差不多,也需要使用class关键字。下面通过一个实际的例子来看一下Python类是如何创建的。本例会创建一个...
    99+
    2023-01-31
    方法 Python
  • python中什么是伪私有属性
    本篇文章给大家分享的是有关python中什么是伪私有属性,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、...
    99+
    2023-06-14
  • python类的私有属性和公共属性说明
    目录python类私有属性和公共属性python私有属性的定义python类私有属性和公共属性 对于python而言,类的属性的可见度只有两种,public和private。 类的私...
    99+
    2024-04-02
  • JS私有属性的实现方式有哪些
    这篇文章主要为大家展示了“JS私有属性的实现方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS私有属性的实现方式有哪些”这篇文章吧。class 是创建对象的模版,由一系列属性和方法构成...
    99+
    2023-06-29
  • Python私有函数,私有变量及封装的方法
    这篇“Python私有函数,私有变量及封装的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python私有函数,私有变量...
    99+
    2023-06-29
  • Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法
    这篇文章主要介绍了Java怎么通过反射获取私有构造、私有对象、私有字段、私有方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java反射获取私有构造、私有对象、私有字段、私...
    99+
    2023-06-22
  • Java如何通过反射获取私有构造、私有对象、私有字段、私有方法
    Java反射获取私有构造、私有对象、私有字段、私有方法 1. 创建测试的私有对象 public class Person { private int age = 5; ...
    99+
    2024-04-02
  • 浏览器私有属性是什么
    这篇文章主要介绍浏览器私有属性是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! Google Chrome, Safari (-webkit) Firefox (-moz...
    99+
    2024-04-02
  • Python中关于面向对象私有属性方法的详细讲解
    目录1.私有属性和私有方法私有属性:私有方法:类部调用私有属性和私有方法子类不能继承父类私有属性和方法实例属性(对象属性)通过实例(对象)去修改类属性2.修改私有属性的值3.类属性和...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作