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私有化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Python正则表达式高效处理文本数据的秘诀轻松掌握

    Python正则表达式高效处理文本数据的秘诀轻松掌握

    当谈到文本处理和搜索时,正则表达式是Python中一个强大且不可或缺的工具,正则表达式是一种用于搜索、匹配和处理文本的模式描述语言,可以在大量文本数据中快速而灵活地查找、识别和提取所需的信息,
    2023-11-11
  • Python中将列表转化为链表的方法详解

    Python中将列表转化为链表的方法详解

    这篇文章主要介绍了Python中将列表转化为链表的方法详解,本文的主要问题是输入一组数,将其按照顺序添加到链表中,文中提供了解决思路与部分实现代码,需要的朋友可以参考下
    2023-11-11
  • python版简单工厂模式

    python版简单工厂模式

    这篇文章主要为大家详细介绍了python版简单工厂模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • python 代码运行时间获取方式详解

    python 代码运行时间获取方式详解

    这篇文章主要介绍了python 代码运行时间获取方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python 统计一个列表当中的每一个元素出现了多少次的方法

    python 统计一个列表当中的每一个元素出现了多少次的方法

    今天小编就为大家分享一篇python 统计一个列表当中的每一个元素出现了多少次的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python+KgCaptcha实现验证码的开发详解

    Python+KgCaptcha实现验证码的开发详解

    验证码通常是为了区分用户是人还是计算机,也可以防止解开密码等恶意行为,而客户端上多数会用在关键操作上。现在验证码的种类样式也特别多,本文主要介绍了如何用Python和KgCaptcha做出验证码功能,需要的可以参考一下
    2023-04-04
  • python shapely.geometry.polygon任意两个四边形的IOU计算实例

    python shapely.geometry.polygon任意两个四边形的IOU计算实例

    这篇文章主要介绍了python shapely.geometry.polygon任意两个四边形的IOU计算实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python实现坦克大战

    python实现坦克大战

    这篇文章主要为大家详细介绍了python实现坦克大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Python利用matplotlib生成图片背景及图例透明的效果

    Python利用matplotlib生成图片背景及图例透明的效果

    这篇文章主要给大家介绍了Python利用matplotlib生成图片背景及图例透明效果的相关资料,文中给出了详细的示例代码,相信对大家具有一定的参考家价值,需要的朋友们下面来一起学习学习吧。
    2017-04-04
  • pycharm中django框架连接mysql数据库的方法

    pycharm中django框架连接mysql数据库的方法

    这篇文章主要介绍了pycharm中django框架连接mysql数据库的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04

最新评论