面向对象三大特性之封装
封装
单下与双下封装法
class Schoolgirl(object): def __init__(self,name,age): # 注意,以双下划线开头,双下划线结尾的并不属于隐藏接口的范畴!! self._name = name 对于单下划线开头的属性或者方法来说,Python并不推荐直接使用该属性或方法,但是并不强制被外部调用。 self.__age = age 对于双下划线开头的属性或者方法来说,Python根本不希望被外部直接调用,因此外部不能直接调用。 def show_msg(self): """这里就相当于开了一个接口""" print("我的名字是:[{0}],我的年龄是:[{1}]".format(self._name,self.__age)) s1 = Schoolgirl(昭儿",18 ) print(s1._name) # 可以访问该属性,但是并不推荐,这是一种约定 # print(s1.__age) # 直接不让外部访问。 s1.show_msg() 可以通过文明的方式进行访问 ==== 执行结果 ==== 我的名字是:[昭儿],我的年龄是:[18] """ Package(object): __f1(self): 正在运行f1") __f2正在运行f2__f3正在运行f3 interface(self): 由于隐藏是对外部的,故内部可以随意使用或调用,那么interface这个方法也就是属于一个接口方法""" self.() self.() p1 = Package() p1.interface() 正在运行f1 正在运行f2 正在运行f3 """ 双下封装法内部原理
__init__(self,age): self._name = name 对于双下划线开头的属性或者方法来说,Python并不希望被外部直接调用,因此外部不能直接调用。 ) s1.show_msg() ==== 验证:类中所有双下滑线开头的属性都会在类定义阶段、检测语法时自动变成“_类名__属性名”的形式。 ==== print(s1.__dict__) {'_name': '昭儿','_Schoolgirl__age': 18} print(s1._Schoolgirl__age) 18 ==== 验证:变形操作只在类定义阶段发生一次,在类定义之后的赋值操作,不会变形 ==== s1.__weight = 87 __weight) 87 封装与property
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |