Day28.如何隐藏属性

1.如何隐藏属性_隐藏属性的使用方法

2.如何隐藏属性_隐藏属性的需要注意的问题

'''
二:将封装的属性进行隐藏操作
'''
# 1.如何隐藏:在属性名前加__前缀,就会实现对外隐藏属性效果
# 该隐藏需要注意的问题:
#   Ⅰ:在类外部无法直接访问双下滑线开头的属性,但知道了类名和属性名可以拼出来:_类名__属性,然后
#   就可以访问了,如:Foo._A__N,所以说这种操作并没有严格意义上地限制外部访问,仅仅只是一种语法
#   意义上的形式。
class Foo:
    __x = 1 # 属性伪装成_Foo__x

    def __f1(self): # 属性伪装成_Foo__f1
        print('from test')

print(Foo.__dict__)
print('')

#   Ⅱ:这种隐藏对外不对内,外部用__x访问不到,内部使用__x可以访问到
#   因为__开头的属性会在检查类内代码语法时统一发生变形
class Foo:
    __x = 1 # 属性变形成_Foo__x

    def __f1(self): # 属性变形成_Foo__f1
        print('from test')

    def f2(self):
        print(self.__x)     # 实际打印:print(self._Foo__x)
        print(self.__f1)    # 实际打印:print(self._Foo__f1)

obj = Foo()
obj.f2()
print('')
# print(Foo.__dict__)
# Foo.x
# Foo.f1

# III:变成成_Foo__x这种变形操作只在检查类体语法的时候发生于一次,之后定义的__开头的属性都不会变形

class Foo:
    __x = 1 # 属性变形成_Foo__x

    def __f1(self): # 属性变形成_Foo__f1
        print('from test')

    def f2(self):
        print(self.__x)     # 实际打印:print(self._Foo__x)
        print(self.__f1)    # 实际打印:print(self._Foo__f1)

# 新定义一个类体代码
Foo.__y = 3
print(Foo.__dict__)
print(Foo.__y)

3.如何隐藏属性_对象中使用__开头的隐藏属性

print('隐藏对象属性'.center(50, '-'))
class Foo:
    __x = 1
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

obj = Foo('egon', 18)
print(obj.__dict__)
print(obj.name, obj.age)
print('')

# 2.为何要隐藏
print('为何要隐藏'.center(50,'-'))

 

posted on 2024-06-18 14:37  与太阳肩并肩  阅读(3)  评论(0编辑  收藏  举报

导航