面向对象初接触(下)
Posted pythonerLau
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象初接触(下)相关的知识,希望对你有一定的参考价值。
当一个类中的属性条件不满足我们的需求时,考虑到为了不破坏封装,从而对其属性进行增加的实现,就有了以下几种方法
猴子补丁
from test01 import Person from test001 import get_score def monkeypatch4Person(): Person.get_score = get_score monkeypatch4Person() if __name__== ‘__main__‘: print(print(Person().get_score))
#Person类get_score方法是从数据库拿数据,但是不方便测试,使用猴子补丁,替换了get_score方法,返回模拟的数据
属性装饰器
#把实例的属性保护起来,不让外部直接访问,外部使用getter读取属性和setter方法设置属性 class Person: def __init__(self,name,age=18): self.name = name self.__age = age def age(self): return self.__age def set_age(self,value): self.__age = value 通过age 和set_age方法操作属性
class Person: def __init__(self,name,age=18): self.name = name self.__age = age @property def age(self): return self.__age @age.setter def age(self,age): self.__age = age @age.deleter def age(self,age): del self.__age print(‘del‘) tom = Person(‘tom‘) print(tom.age) tom.age = 20 print(tom.age) del tom.age
#特别注意:这三个方法同名
#property装饰器
#后面的函数名就是以后的属性名,他就是getter,这个一定要有,他提供了可读性
#setter装饰器
#与属性名同名,且接受2个参数,第一个是self,第二个是将要赋值的值,有了它,属性可写
#deleter装饰器
#可以控制是否删除属性,少用
#property装饰器必须在前,setter,deleter装饰器在后
#property装饰器能通过简单的方式,把对方法的操作编程对属性的访问,并起到了一定隐藏效果
#也可以如下
class Person: def __init__(self,name,age=18): self.name = name self.age = age age = property(lambda self:self.__age) tom =Person(‘tom‘) print(tom.age)
对象的销毁
class Person: def __init__(self,name,age=18): self.name = name self.age = age def __del__(self): print(‘delete {}‘.format(self.name)) tom = Person(‘tom‘) del tom
python没有方法重载
python是动态强类型语言,赋值及定义,所以定义灵活,不需要指定类型
封装
面向对象的三要素之一
封装:
将数据和操作组织到类中,即属性和方法
将数据隐藏起来,给使用者提供操作,使用者通过操作就可以获取或者修改数据,getter和setter
通过访问控制,暴露适当的数据给用户,隐藏该隐藏的,保护成员或私有成员
以上是关于面向对象初接触(下)的主要内容,如果未能解决你的问题,请参考以下文章