Python属性私有化详解

 更新时间:2023年02月08日 10:13:43   作者:HaiFan.  
私有化是为了实现更好的封装形式。能隐藏属性,不被随意修改。以前置双下划线__属性/方法名定义,但是结尾不能是双下划线。如果不让某些属性在类外部被随意更改,可设置成私有属性。在类定义的内部可以访问

前言

在做程序的过程中,有时候程序猿不想让外人动一些值,这个时候,就可以考虑把一些变量进行私有化

__属性:就是将属性私有化,访问范围仅仅限于类中。

私有化属性

私有化属性只需要以双下划线开头,声明该属性为私有属性即可,声明之后就不能在类外部使用或直接访问。

class Student:
    __age = 10
a = Student()
print(a.__age)

私有化属性的有三个特性:

  • 不能在类外面访问
  • 可以在类里面访问,修改
  • 子类不能继承私有化属性

set和get

set是为了赋值,给私有化属性赋值。

get是为了取值,把私有化属性的值取出来。

class Student:
    __age = 10
    def __init__(self ,age):
        self.age = age
    # 定义公有的set方法和get方法
    def set_age(self ,age):
        self.__age = age
    def get_age(self):
        return self.__age
a = Student('100')
print(a.get_age())
a.set_age(1000)
print(a.get_age())

私有化好处:

隐藏属性不被外界随意修改(在set里面加一些判断,防止被随意修改)

也可以修改,通过函数完成

def setXXX(self,xxx):
    筛选赋值内容
    if 条件:
        赋值
    else:
        不赋值

如果想获取具体的某一个属性,使用get函数来完成

def getXXX(self):
    return 要返回的某一个属性

通过set和get函数即可完成对私有化属性的一些操作。

装饰器@property

class Stu:
    def __init__(self,name,age):
        self.name = name
        self.__age = age
    def set_age(self,age):
        if age > 0 and age < 100:
            self.__age = age
        else:
            print('不在规定范围内')
    def get_age(self):
        return self.__age
    def __str__(self):
        return 'name: {} \nage:{}'.format(self.name,self.__age)
a = Stu('lisan',20)
a.name = 'wangwu'
print(a.name)
a.set_age(30)
print(a.get_age())

当我想访问私有属性的时候,只能通过get和set函数来访问。

通过装饰器,就可以让私有属性当作属性一样去调用。

class Stu:
    def __init__(self,name,age):
        self.name = name
        self.__age = age
    @property
    def age(self):
        return self.__age
    @age.setter
    def age(self,age):
        self.__age = age
    def __str__(self):
        return 'name: {} \nage:{}'.format(self.name,self.__age)
a = Stu('lisan',20)
a.age = 90
print(a)
a.age = 40
print(a)

到此这篇关于Python属性私有化详解的文章就介绍到这了,更多相关Python私有化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • TensorFlow模型保存/载入的两种方法

    TensorFlow模型保存/载入的两种方法

    这篇文章主要为大家详细介绍了TensorFlow 模型保存/载入的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python实现按任意键继续执行程序

    python实现按任意键继续执行程序

    本文给大家分享的是如何使用Python脚本实现按任意键继续执行程序的代码,非常的简单实用,有需要的小伙伴可以参考下
    2016-12-12
  • Python实现序列化及csv文件读取

    Python实现序列化及csv文件读取

    这篇文章主要介绍了Python实现序列化及csv文件读取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python__name__原理及用法详解

    python__name__原理及用法详解

    这篇文章主要介绍了python__name__原理及用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Pygame Event事件模块的详细示例

    Pygame Event事件模块的详细示例

    事件是Pygame的重要模块之一,比如鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等等,本文就详细的介绍一下具体用法,感兴趣的可以了解一下
    2021-11-11
  • Python打包文件执行报错:ModuleNotFoundError: No module named ‘pymssql‘的解决方法

    Python打包文件执行报错:ModuleNotFoundError: No module 

    这篇文章给大家介绍了Python打包文件执行报错:ModuleNotFoundError: No module named ‘pymssql‘的解决方法,如果有遇到相同问题的朋友可以参考阅读一下本文
    2023-10-10
  • Python表格处理模块xlrd在Anaconda中的安装方法

    Python表格处理模块xlrd在Anaconda中的安装方法

    本文介绍在Anaconda环境下,安装Python读取.xls格式表格文件的库xlrd的方法,xlrd是一个用于读取Excel文件的Python库,本文介绍了xlrd库的一些主要特点和功能,感兴趣的朋友一起看看吧
    2024-04-04
  • OpenCV实现相机校正

    OpenCV实现相机校正

    这篇文章主要为大家详细介绍了OpenCV实现相机校正,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例

    python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例

    这篇文章主要介绍了python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例,需要的朋友可以参考下
    2020-03-03
  • Django数据库迁移报错InconsistentMigrationHistory

    Django数据库迁移报错InconsistentMigrationHistory

    最近在使用Django,学习了一下Django数据库迁移,在执行迁移命令时,突然报错,本文就总结了一下原因,感兴趣的小伙伴们可以参考一下
    2021-05-05

最新评论