类的封装

  • 封装:属性和方法的抽象
  • 对类的属性(变量)/方法(函数)进行定义,隔离及保护
  • 目标是形成一个类对外可操作属性和方法的接口

一、私有属性:仅供当前类访问的类属性,子类亦不能访问

      私有属性名开始需要两个下划线(__),如__count

      应用场景:所有访问该私有属性都需要通过使用该属性的方法,则在方法中可以增加额外代码,例:判断访问该属性的有效性/访问的次数,即对该属性的接口进行控制

1.私有类属性

class Democlass:
    __count = 0
    def __init__(self,name):
        self.name = name
        Democlass.__count +=1
    @classmethod
    def getCount(cls):
        return Democlass.__count
dc1 = Democlass("老王")
dc2 = Democlass("老李")
print(dc2.getCount())   #在方法中使用私有属性


运行结果:2

2、私有实例属性

class Democlass:
    def __init__(self,name):
        self.__name = name
    def getName(self):
        return self.__name
dc1 = Democlass("laowam")
dc2 = Democlass("laoli")
print(dc1.getName(),dc2.getName())  #构造方法使用私有实例属性


运行结果:laowam laoli

二、私有方法

class Democlass:
    def __init__(self,name):
        self.__name = name   #创建私有实例属性
    def __getName(self):     #创建私有方法
        if self.__name !="":
            return self.__name
        else:
            return "laozhang"
    def printName(self):    #在公有方法中调用私有方法
        return "{}同志".format(self.__getName())
dc1 = Democlass("laowang")
dc2 = Democlass("")
print (dc1.printName(),dc2.printName())


运行结果:laowang同志 laozhang同志

三、类的保留属性

python解释器预留的类属性,以双下划线开头和结尾

作用:为理解python类提供了统一的属性接口

属性值:具有特定含义,类定义后直接使用

1、仅用类名访问的保留属性

__name__: 类的名称
__qualname__:以 . 分隔从模块全局命名空间开始的类名称

__bases__:类所继承的基类名称

class Democlass:
    "a demo class"
    def __init__(self,name):
        self.name = name
    def getName(self):
        return self.name
dc1 = Democlass("老王")
print (Democlass.__qualname__,Democlass.__name__,Democlass.__base__)

运行结果:Democlass Democlass <class 'object'> #python中的所有类都来源于object

2.

<类>. __dict__:包含类成员信息的字典,key是名称,value是地址

<对象>. __dict__:包含对象属性的字典

__class__: 对象所对应的类信息,即type信息

__doc__:类描述

__module__:类所在模块的名称

class Democlass:
    "a demo class"
    def __init__(self,name):
        self.name = name
    def getName(self):
        return self.name
dc1 = Democlass("老王")
print (dc1.__doc__,dc1.__module__,  dc1.__class__)
print(Democlass.__doc__,Democlass.__module__,  Democlass.__class__)
print(Democlass.__dict__)
print(dc1.__dict__)

Democlass. __class__:其实是指类对象的类型,类对象的类型是TYPE类型

 

posted @ 2020-04-08 15:03  小小鱼鱼儿  阅读(88)  评论(0)    收藏  举报