面向对象之封装
在什么场景下需要封装
1.隐藏一个属性 不让类外部调用
2.保护中国属性 不让被随意修改
3.保护属性不被子类继承
class Person(): def __init__(self,name,age): self.name = name self.__age = age #定义为私有属性 def get_age(self): return self.__age p = Person('judy',18) # print(p.__age) #此处报错,不可以直接调用私有属性 print(p.get_age())
与封装有关的三个内置方法
property
class Person(): def __init__(self,name,age): self.name = name self.__age = age #定义为私有属性 @property #把一个方法伪装成一个属性,不能有self之外不能有其他的参数。调用时 直接调用函数名,不用加() def age(self): return self.__age @age.setter #给属性设置值 def age(self,age): self.__age = age @age.deleter #删除私有属性age def age(self): del self.__age p = Person('judy',18) p.age = 16 #给私有属性age赋值 print(p.age) #查看私有属性age del p.age #删除私有属性age
classmethod: 把一个方法变成类方法,不需要实例化对象,通过类名就可以访问类属性和类方法
class Goods(): __discount = 0.6 def __init__(self,name,price): self.__name = name self.__price = price #定义一个方法修改打折 @classmethod def change_disc(cls,new): cls.__discount = new Goods.change_disc
staticmethod : 不需要实例化对象可以直接调用# 完全面向对象的程序中,如果一个函数既和对象 没关系,又和属性没有关系 就用静态方法
class Person(): def __init__(self,name,password): self.name = name self.password = password @staticmethod def login(): print('input your name and password') Person.login()