首页 > 其他分享 >Day28.如何隐藏属性

Day28.如何隐藏属性

时间:2024-06-18 14:44:13浏览次数:23  
标签:__ .__ Day28 self print Foo 隐藏 属性

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,'-'))

 

标签:__,.__,Day28,self,print,Foo,隐藏,属性
From: https://www.cnblogs.com/vless/p/18254334

相关文章

  • Day28.课程对象定义与使用
    1.课程对象定义与使用_课程类和班级类关联 班级类,Class:'''班级'''classClass:#__init__中,初始化单个对象,记录每个班级独有的东西def__init__(self,class_name):self.class_name=class_name#初始班级时,班级没有课程表self.cla......
  • dataGridView 常用属性和方法
    ContextMenuStrip属性:当用户点击鼠标右键时(设置和contextMenuStrip挂钩)MultiSelect属性是否可以多行选择SelectionMode属性:设置选中方式,比如是否选中一整行(设置为FullRowSelect)Dock属性:设置显示位置AllowUserToAddRows属性:取消表格中末尾的空白Anchor属性:......
  • Day28.学校与班级建关联
    1.学校与班级建关联_班级类,将班级和班级对应的课程信息生成对象'''班级'''classClass:#__init__中,初始化单个对象,记录每个班级独有的东西def__init__(self,class_name):self.class_name=class_name#初始班级时,班级没有课程表self......
  • Python中的属性
        Python中的属性主要分为类属性,对象属性。1.类属性    类属性:类所有,所有的实例对象都能够共享,能通过类名和实力对象名访问,当当前的类属性被实例对象通过对象名.属性名的形式调用之后,当前对象就会多出一个实例属性,此后使用对象名.属性名的形式调用的就是对象属......
  • GPT-4o 只是对话式 Al 的冰山一角,背后隐藏了哪些新机会?(内含福利) | 编码人声
       「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。听友福利欢迎在小宇宙播客评论区留言,分享你对GPT-4o的看法,或者对最有潜力的对话式AI场景的预测。我们将抽出......
  • Day28.学校类的定义与使用
    1.学校类的定义与使用_学校类__创建学校并关联班级 学校类__创建学校并关联班级,代码如下:#整合-->解耦合-->扩展性增强classSchool:#学校类#学校共有的数据school_name='OLDBOY'#每个学校独有的东西def__ini......
  • 类对象属性(python练习)
    编写一个程序来创建一个类并使用该类的方法来打印属性。创建一个类:创建自行车Bicycle类。在类中,创建两个方法:__init__()和print_attributes()。类有两个属性:gear'和speed,它们应该在init()`中初始化。在print_attributes()方法中,将gear属性和speed属性分别打印在两行。在类......
  • jQuery引入,基本选择器和关系选择器,组合选择器,分组与嵌套,基本筛选器,属性选择器,前
    ⅠjQuery引入【一】什么是jQuery【1】概述jQuery是一个轻量级的、兼容多浏览器的JavaScript库。jQuery使用户能够更方便地处理HTMLDocument、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Writeless,domore.“【2】小结jQ......
  • Day27.属性查找与绑定方法
    1.属性查找与绑定方法_类和类下的对象访问数据属性 类和类下的对象访问数据属性代码如下:classStudent:#1.变量的定义stu_school='oldboy'#记录类下实例化次数count=0#空对象,'egon',18,'male'def__init__(self,x,y,z):......
  • 【图像隐写】基于Jsteg算法实现JPEG图像信息隐藏,可设置DCT系数 嵌入率附Matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......