python封装
Posted zhaoxiansheng666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python封装相关的知识,希望对你有一定的参考价值。
1.什么是封装(Encapsulation)?
答:封装是属性和方法的抽象,目的是形成一个类对外可操作属性和方法的接口。
属性的抽象:对类的属性(变量)进行定义,隔离及保护
方法的抽象:对类的方法(函数)进行定义,隔离以及保护。
私有类属性 注意:
class DemoClass: __count=0 #定义了一个私有类属性__count def __init__(self,name): self.name=name DemoClass.__count+=1 #私有类属性在类的内部使用方法和其他的类属性一致,都是类名.属性名 #如果想要在外部使用这个私有类属性的话,需要再定义一个函数,就是类方法 @classmethod def getCount(cls): return DemoClass.__count dc1=DemoClass("老王") dc2=DemoClass("老李") print(DemoClass.getCount()) #私有属性不能使用类名.私有类属性名的方法来直接访问,但是可以使用方法的方式,通过返回值的方式访问 \'\'\' 既然都是为了获得私有类属性的值,为什么不把他变成公有的,直接访问呢? 相对于公有属性,如果把一个方法变成私有的,再用一个方法来对他进行访问。所有对这个属性值的访问都需要经过setCount()方法。在这个方法中可以 增加额外的代码,判断访问的有效性。还可以对访问的次数进行计数,可以对访问的这个接口进行很好的控制,可以有效的保护里面的变量
私有属性注意:
class DemoClass: def __init__(self,name): self.__name=name #私有实例属性定义 def getName(self): return self.__name #私有实例属性的内部使用 dc1=DemoClass("老王") dc2=DemoClass("老李") print(dc1.getName(),dc2.getName()) #对象方法 print(dc1.__DemoClass__name)#这样也可以访问私有属性,所以说私有属性并不一定真正的私有,只能形式上私有,这也是python和其他语言不通的地方。只是需要再换个名字来访问他 print(dc1.__name,dc2.__name) #会报错 \'\'\' 总结:对于类中的属性和实例属性,如果你不希望这个属性可以通过方法或类名.的方式进行访问,你可以把它变成私有的属性 变成私有属性的方法就是在属性名字前面增加双下划线,仅供类内部使用 \'\'\'
类的方法:
class DemoClass: def __init__(self,name): self.__name=name def __getName(self): #私有方法的定义 if self.__name!="": return self.__name else: return "老张" def printName(self): return "{}同志".format(self.__getName()) #私有方法的使用 dc1=DemoClass("老王") dc2=DemoClass("") print(dc1.printName(),dc2.printName()) #封装后通过公开方法使用 \'\'\'总结: 各种方法都可任意通过增加双下滑线变为私有方法,私有方法从形式上保护了python类内部使用的函数逻辑,私有与公开是程序员的逻辑,不是安全逻辑,重视约定。\'\'\'
class DemoClass: def __init__(self,name): self.name=name def __getName(self): #私有方法的定义 if self.name!="": return self.name else: return "老张" def printName(self): return "{}同志".format(self.__getName()) #私有方法的使用 dc1=DemoClass("老王") dc2=DemoClass("") print(dc1.printName(),dc2.printName()) #封装后通过公开方法使用
class DemoClass: "A Demo Class" def __init__(self,name): self.name=name def getName(self): return self.name dc1=DemoClass("老王") print(DemoClass.__qualname__) print(DemoClass.__name__) print(DemoClass.__bases__)
class DemoClass: "A Demo Class" def __init__(self,name): self.name=name def getName(self): return self.name dc1=DemoClass("老王") print("DemoClass.__doc__:",DemoClass.__doc__) print("DemoClas.__module__:",DemoClass.__module__) print("DemoClass.__class__:",DemoClass.__class__) print("dc1.__doc__",dc1.__doc__) print("dc1.__module__",dc1.__module__) print("dc1.__class__",dc1.__class__) print(DemoClass.__dict__) print() print(dc1.__dict__)
保留方法:
以上是关于python封装的主要内容,如果未能解决你的问题,请参考以下文章