美文网首页
Python数据封装和私有属性

Python数据封装和私有属性

作者: 李白开水 | 来源:发表于2020-07-14 15:30 被阅读0次

本文会用到以下文章的Date类:Python中的静态方法、类方法以及对象方法(实例方法)

class Date:
    # 构造函数
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day
    def __str__(self):
        return "{year}/{month}/{day}".format(year = self.year, month = self.month,day = self.day)

定义一个类:

class User:
    def __init__(self, birthday):
        self.birthday = birthday

    def get_age(self):
        # 返回年龄
        return 2020 - self.birthday.year

if __name__ == "__main__":
    user = User(Date(1990, 2, 1))
    print(user.get_age())

运行一下:

image.png
现在是直接可以访问user的生日的:
image.png
如果希望将User的出生日期隐藏,不希望直接可以访问,可以在birthday前面加两个下划线表示私有属性:
class User:
    def __init__(self, birthday):
        self.__birthday = birthday

    def get_age(self):
        # 返回年龄
        return 2020 - self.__birthday.year

这时候再来访问user的生日的,就访问不到了:

image.png
子类也无法获取这个birthday。
在加上双下划线之后,Python把这个变量的格式变化成了如下格式:
_classname__attr
也就是把__birthday变为了_User__birthday,使用这个格式再来print一下:
image.png
注意类名(classname)是User而不是user
所以还是可以访问得到。

相关文章

  • Python数据封装和私有属性

    本文会用到以下文章的Date类:Python中的静态方法、类方法以及对象方法(实例方法) 定义一个类: 运行一下:...

  • 数据封装和私有属性

    数据封装和私有属性 私有属性,并不能真正意义上的防止别人访问,只是一种规范 使用命名私有属性后,如果需要调用,可以...

  • 02-谈谈面向对象的三大特征

    封装,继承,多态 封装 类,封装了数据(属性)和行为(方法) 狭义的封装:就是创建一个类,属性私有化,提供gett...

  • Java基础-面向对象

    1.封装:将属性私有化,对私有化属性提供get/set 方法。 封装目的:保证数据安全性。 使用g...

  • Python属性,方法,函数

    Attribute 属性封装的是实例的数据,它用来获取实例私有字段的值。属性分为类属性和实例属性。类属性发生改变时...

  • Python进阶7

    元类编程 Python属性函数 引言 Python中我们对于自己设置的类,尽量要使其属性私有化,获得更好的封装性。...

  • python入门系列:元类编程

    Python属性函数 引言 Python中我们对于自己设置的类,尽量要使其属性私有化,获得更好的封装性。 如果要访...

  • 面向对象的理解

    封装 语法 类内 private 实现 属性私有,get/set get 获得数据 set 设置数据 alt + ...

  • 05_面向对象的特征有哪些?

    封装 封装就是把数据和对数据操作的方法进行绑定,对数据的操作只能通过自定义的数据操作方法。即属性私有化,get、s...

  • python 私有属性

    私有属性 python 中类里面定义的变量叫做类属性,类属性有两种公有属性和私有属性 属性的定义: 私有: 以单下...

网友评论

      本文标题:Python数据封装和私有属性

      本文链接:https://www.haomeiwen.com/subject/xoxfhktx.html