python 类的封装

Posted xiaobaizzZ

tags:

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

封装:即在设计类时,刻意的将一些属性和方法隐藏在类的内部,这样将无法直接以"类对象.属性名"(或者"类对象.方法名(参数)")的形式调用这些属性(或方法),而只能用未隐藏的方法间接的操作这些隐藏的属性和方法。

  1. 封装机制保证了类内部数据结构的完整性,很好的避免了外部对内部数据的影响,提高了程序的可维护性。
  2. 避免用户对类中属性或方法进行不合理的操作。
  3. 提供代码的复用性。

python类如何进行封装
不同于其他面向对象的编程语言,python类中的变量和函数不是共有的就是私有的。

  1. public:公有属性的类变量和类函数,在类的外部、类内部以及子类中,都可以正常访问
  2. private:私有属性的类变量和类函数,只有在本类内部使用,类的外部以及子类都无法使用。

但是,python并没有提供public、private这些修饰符。为了实现类的封装,python采取了下面的方法:

  1. 默认情况下,python类中的变量和方法都是公有的,它们的名称前都没有下划线(_)
  2. 如果类中的变量和函数,其名称以双下划线“__”开头,则该变量或函数为私有的。
  3. 以单下划线“_”开头的类属性和类方法约定俗成的被视为私有属性和私有方法,虽然它们也能通过类对象正常访问,但是建议不要这样。
  4. 以双下划线开头和结尾的类方法(如__init__())时python内部定义的,自己定义时,不要使用这种格式。
class Person:
    def setname(self, name):
        if len(name) < 3:
            raise ValueError('名称长度必须大于3!')
        self.__name = name
        
    def getname(self):
        return self.__name
    
    #为name配置setter和getter方法
    name = property(getname, setname)
    
    def setage(self, age):
        if age < 100:
            self.__age = age
        else:
            raise ValueError('年龄必须小于100!')
    
    def getage(self):
        return self.__age
    
    #为age配置getter和setter方法
    age = property(getage, setage)
    
    #定义私有方法
    def __display(self):
        print(self.__name, "今年", self.__age, "岁。")
        
xiaobai = Person()
xiaobai.name = "xiaobai"
xiaobai.age = 20
print(xiaobai.name)
print(xiaobai.age)
xiaobai
20

以上是关于python 类的封装的主要内容,如果未能解决你的问题,请参考以下文章

python-类的封装(私有属性,私有方法)

python 类的封装

有条件地导入 python 类的片段

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装