码迷,mamicode.com
首页 > 编程语言 > 详细

python 类的封装

时间:2020-01-22 01:01:17      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:名称   play   ini   property   无法   修饰符   函数   prope   避免   

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

  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 类的封装

标签:名称   play   ini   property   无法   修饰符   函数   prope   避免   

原文地址:https://www.cnblogs.com/xiaobaizzz/p/12227501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!