面向对象的设计方法里面,最重要的两条,一条是代码复用,通过继承的权限设置进行封装。
Python的类封装和C++的定义类似,只是不用关键字。但是他的类型的定义没有C++丰富严格。
CSDN的这篇视频很简单清晰的表现了这个设计思想。但是,视频不方便查阅,所以,这里重写了一下。
CSDN的视频里面给出的定义:

【xx】
【_xx】
【__xx】
class Apple():
def name(self,name):
self.__name = name
def getName(self):
return self.__name
这里添加了一个私有的属性name,同时设定了一访问函数,getName去访问他。
class Apple():
def __setAge(self,age):
self.__age = age
def getName(self):
return self.__name
def info(self,age):
self.__setAge(age);
和私有的类一样,可以定义私有的方法.私有方法的调用,在类的定义内,需要给予前缀【self.】,直接调用会报错
对应技能树普遍不能运行的情况,自己编写了一个范例:
【案,这个例子里,我写了两个私有的属性sex,和Married,一个私有函数__SetPrivateMarriedx】
【直接调用私有属性,例如,源码中,person.__sex = “男人”,并不能改变性别的属性,仍然是女人,直到调用了我们预设的接口访问函数SetSex,在文章的最后,我们尝试调用私有函数,结果报错,说明了数据访问的权限被有效的保护了。
person.__SetPrivateMarriedx(“Yes”)】
class People():
def __init__(self,name,work,sex,Married):
self.name = name
self.work = work
self.__sex = sex
self.__Married = Married
def Spyname(self,Spyname):
self.__name = Spyname
def getName(self):
return self.__name
def SetSex(self,Sex):
self.__sex = Sex
self.__SetPrivateMarriedx("Yes")
def __SetPrivateMarriedx(self,Married):
self.__Married = Married
def show(self):
print("姓名",self.name)
print("职务",self.work)
print("性别",self.__sex)
print("婚姻",self.__Married)
person=People("普通人","good","女人","no")
person.show()
person.name = "俞敏洪"
person.work = "新东方老板"
person.__sex = "男人"
person.show()
person.SetSex("男人")
person.show()
person.__SetPrivateMarriedx("Yes")
姓名 普通人
职务 good
性别 女人
婚姻 no
姓名 俞敏洪
职务 新东方老板
性别 女人
婚姻 no
姓名 俞敏洪
职务 新东方老板
性别 男人
婚姻 Yes
AttributeError Traceback (most recent call last)
in
41 person.show()
42
—> 43 person.__SetPrivateMarriedx(“Yes”)
44
AttributeError: ‘People’ object has no attribute ‘__SetPrivateMarriedx’