Python中的数据封装和私有属性

数据封装和私有属性

java中一般用privateprotected来实现类中的私有方法和受保护的方法。

我已经在chapter04文件夹内写好了一个class_method.py文件,文件中定义了一个Date类。具体的Date类参见这篇博客

然后我们导入Date

from chapter04.class_method import Date
class User:
    def __init__(self):
        self.brithday = birthday
	
    def get_age(self):
        #返回年龄
        return 2018 - self.birthday.year
if __name__ = "__main__":
    user = User(Date(1990,2,1))
    print(user.get_age()) # 28  2018-1990
    print(user.birthday) # 1990/2/1 可以获取到用户的birthday   

User类中初始化传入的参数是一个出生日期,但是如果我们希望在获取某人年龄的时候能够隐藏对象的birthday,即不能直接访问birthday,将其隐藏。

python使用双下滑线来进行私有属性的封装。

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

	def get_age(self):
        #返回年龄
        return 2018 - self.__birthday.year        
if __name__ = "__main__":
    user = User(Date(1990,2,1))
    print(user.get_age()) # 28  
    print(user.__birthday) # ‘User’ object has no  attribute ‘__birthday’

私有属性是无法通过实例.私有属性来获取,也无法通过子类来获取,但是在类中的公共方法中还是可以使用,即print(user.get_age())结果为28。

函数前加双下划线也是可以将函数隐藏的,但从理论上来说,双下划线并没有从语言层面上来解决了私有属性的绝对私有性,只是加了一下小技巧。将__birthday变成_User__birthday这样一种结构化的方法。

_User__birthday其中User代表当前类,如果是别的类,就换成别的类名,这也可以缓解不同类之间相同属性名的冲突。

print(user._User__birthday) # 1990/2/1
#这样就能访问到了

猜你喜欢

转载自blog.csdn.net/weixin_43901214/article/details/106916385