类的封装:
针对的源码,保护代码的安全
狭义的封装:私有化
广义的封装:把方法和属性根据类别封装到类中
私有化:
1:将方法私有化
def__函数名()
2.将静态变量私有化
__静态变量
3.将对象的属性私有化
self.__变量=参数
注: 私有化都是在内部完成的,在内部可以调用被私有化的对象,但是在类的外部都不可以使用
私有化只是改变了被私有化的名称,使用 对象名.__dict__ 查看名称
self.__name 变成了 _类名__name
私有的所有内容不可以被继承
注:
self.name 和self.__name是不同的变量可以共存
装饰器
1 @property
如果我们定义的是普通的变量或者属性 那么这个属性可以从外部直接访问 可以任意的修改 obj.attr = 123 甚至可以删除 del obj.attr 私有化 把一个属性加上双下划线 __属性名 这个属性就连在外面看都看不见了 我们实际上有些场景允许别人看,不许改 __属性 @property装饰的属性名 def 属性(): 我们允许别人看,也允许别人改,但是不能瞎改,有一些要求:数据类型 范围 __属性 @property装饰的属性名 def 属性():return __属性 @属性.setter def 属性(self,value): 加点儿条件 修改__属性
私有的 :通过过给__名字这样的属性或者方法加上当前所在类的前缀,把属性隐藏起来了 只能在本类的内部使用,不能在类的外部使用,不能被继承 property 把一个方法伪装成属性 property和私有的两个概念一起用 定义一个私有的 再定义一个同名共有的方法,被property装饰 @方法名.setter @方法名.deleter
2@classmethod
类方法 1. 有些时候我们要修改的是类中的静态变量/类变量 此时根本不会和self有任何的操作关联 这时传一个self参数对我们来说完全没有用 我们希望接受的是当前我们所在的类 类方法推荐使用类名调用而不是使用对象名调用
3@staticmethod
class A: @staticmethod # 声明这个方法只是一个普通的不会使用任何和这个类中的变量相关的方法 def func(): # 此时 func是一个静态方法 print('既不操作和self相关的内容') print('也不操作和类名相关的内容') A.func()