类的封装
- 封装:属性和方法的抽象
- 对类的属性(变量)/方法(函数)进行定义,隔离及保护
- 目标是形成一个类对外可操作属性和方法的接口
一、私有属性:仅供当前类访问的类属性,子类亦不能访问
私有属性名开始需要两个下划线(__),如__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类型

浙公网安备 33010602011771号