面向对象的三大特征之一:封装

Posted 笃行1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象的三大特征之一:封装相关的知识,希望对你有一定的参考价值。

封装:每个对象都包含它能进行操作所需要的所有信息,这个特性就是封装,因此对象不必依赖其他对象来完成自己的操作。这样的方法和属性包装在类中,通过类的实例来实现。

class A:
    __x=1

    def __init__(self, name ,age):
        self.name = name
        self.age = age

    def __foo(self):
        print(from foo)

print(A.__dict__)
print(__x=,A._A__x)
print(A.__x)
print(A.__foo)

a=A(alex,19)
print(a.__dict__)

结果:

Traceback (most recent call last):
{__module__: __main__, _A__x: 1, __init__: <function A.__init__ at 0x000000966D160488>, _A__foo: <function A.__foo at 0x000000966D160400>, __dict__: <attribute __dict__ of A objects>, __weakref__: <attribute __weakref__ of A objects>, __doc__: None}
__x= 1
  File "C:/Users/zhang1995/PycharmProjects/untitled4/text_file/4..py", line 13, in <module>
    print(A.__x)
AttributeError: type object A has no attribute __x

总结分析:从上面的代码和运行结果可以看出,prInt(A.__dict__)得出A的数据属性分别是‘_A__x‘,函数属性是:‘__init__‘,‘_A__foo‘。但是A类的定义中,数据属性是__x,而函数属性则是__foo().同时,print(‘__x=‘,A._A__x)得出__x= 1。所以可以总结出python的封装并不是真正意义上的隐藏,而是在定义的时候(封装有且只能在类的定义时定义好)就已经产生了变形格式为:_所属的类名+变量名。

 

这种变形的特点:

                1.在类的外部无法直接使用,封装的属性

                 2.在类的外面无法直接使用:self.变量名

      3.子类无法覆盖父类的__开头的属性(定义的)

 

封装的作用:

一:封装数据属性:明确的区分内外,控制外部对隐藏属性的操作行为

二:封装方法:隔离复杂度

 

以上是关于面向对象的三大特征之一:封装的主要内容,如果未能解决你的问题,请参考以下文章

封装是java面向对象编程三大特征之一。 简单的属性封装

JavaSE| 面向对象的三大特征

Java面向对象编程三大特征 - 封装

PHP-面向对象的三大基本特征和五大基本原则的概念

001面向对象的特征有哪些方面

面向对象三大特征