美文网首页
将名称封装到python类中

将名称封装到python类中

作者: KillerManA | 来源:发表于2016-05-23 09:01 被阅读228次

在其它的编程语言中,一般都有对属性的访问控制,而在python并没有这一特性,那么我们应该如何应对这个问题?
常用的做法如下:

class A:
    def __init__(self):
        self._internal = 0
        self.public = 1

    def public_method(self):
        pass

    def _internal_method(self):
        pass

第一个规则就是我们在任何以下划线开头的名字应该总认为被内部实现,python本身并不会去阻止他人的访问,但是如果这样做了,可能会导致脆弱的代码。
有时我们见过以双下划线开头的名称,如下:

class B:
    def __init__(self):
        self.__private = 0

    def __private_method(self):
        pass

    def public_method(self):
        self.__private_method()

这样的简单处理,可以对暴露共有方法,隐藏私有方法,那么这个以双下划线开头的属性有哪些行为,目的是什么?
在python中会对以双下划线开头的名称进行名称重整行为,具体来说就是会将上面的类的私有属性分别重命名为:_B__private, _B_private__method。那么这样命名的目的何在?
是为了继承而存在的,这样的属性不能通过继承而覆盖。

class C(B):
    self.__private = 1

    def __private_method(self):
        ...

因为这里带双下划线的私有名称都会被重新命名为_C__private和_C__private__method,这和基类B中的重整名称不一样,所以这个只是属于C类的私有方法。

相关文章

  • 将名称封装到python类中

    在其它的编程语言中,一般都有对属性的访问控制,而在python并没有这一特性,那么我们应该如何应对这个问题?常用的...

  • python 将名称封装到类中

    8.5 我们将私有数据封装到类的实例上,但是有需要考虑到python缺乏对属性的访问控制 第一个规则就是任何以单下...

  • 补充

    面向对象 — 封装—— 对同一类方法封装到类中—— 将数据封装到对象中调用类的实例方法不需要加selfeg:act...

  • 04.less中的混合,带参数混合

    less中的混合 什么是less中的混合(Mixin)?将需要重复使用的代码封装到一个类中,在需要使用的地方调用封...

  • D基础

    访问控制 封装:将数据封装到类的内部,将算法封装到方法中。 封装结果:存在但不可见 修饰符: public:任何位...

  • 数据库连接优化

    制造一个类,将所有方法全部封装到类中,使用数据库时,只用调用相关的方法即可。

  • Python 引用其他.py文件

    Python 引用其他.py文件中的类和类的方法 HelloWorld是文件名称,Hello是类 from Hel...

  • Python爬虫练习 爬取图片

    virtualenv: 是针对python的包的多版本管理,通过将python包安装到一个模块来作为python的...

  • Python:类的定义和访问

    在python 中,首字母大写的名称一般是指类,类中的函数一般是指方法。定义类:class 类名(): 方法(注意...

  • python基础篇(五)

    类class Foods() 根据约定,在Python中,首字母大写的名称指的是类。下面是个简单的示例:方法:...

网友评论

      本文标题:将名称封装到python类中

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