python : 属性封装

class Model:
    __name = "DNN"
    def __init__(self, name):
        self.__name = name
    def print_name(self):
        print(self.__name)

    @classmethod
    def print_cls_name(cls):
        print(cls.__name)

def main():
    Model.print_cls_name()
    cnnmodel = Model("CNN")
    cnnmodel.print_name()
    # print(Model.__name)
    # print(cnnmodel.__name)

if __name__ == '__main__':
    main()

两行注释分别执行后得到如下输出:

AttributeError: type object 'Model' has no attribute '__name'
AttributeError: 'Model' object has no attribute '__name'

1. 通过双下划线开头,可以将数据属性私有化,对于方法一样适用
2. 从报错信息也能看出, Model 是一个 type object , cnnmodel 是一个 Model object

python中的私有化是假的,本质上是做了一次名称替换,因此实际中也有为了方便调试而适用单下划线的情况,而私有化也就全凭自觉了

另附私有属性方法:

(1)_xxx      "单下划线 " 开始的成员变量叫做保护变量,意思是只有类对象(即类实例)和子类对象自己能访问到这些变量,需通过类提供的接口进行访问;不能用'from module import *'导入
   (2)__xxx    类中的私有变量/方法名 (Python的函数也是对象,所以成员方法称为成员变量也行得通。)," 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
    (3)__xxx__ 系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 __init__() 代表类的构造函数。
https://www.cnblogs.com/sufei-duoduo/p/5830035.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值