• 面向对象初接触(下)


    当一个类中的属性条件不满足我们的需求时,考虑到为了不破坏封装,从而对其属性进行增加的实现,就有了以下几种方法
     
    猴子补丁
    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
    通过访问控制,暴露适当的数据给用户,隐藏该隐藏的,保护成员或私有成员
  • 相关阅读:
    shell编程介绍
    第一章作业
    jenkins介绍与操作
    gitlab介绍与操作
    github介绍与操作
    git介绍与操作
    zabbix监控tomcat与安全规范
    js-20170605-基本语法
    webstorm激活方法
    mac的一些基本设置(分享篇)
  • 原文地址:https://www.cnblogs.com/spidermansam/p/7822225.html
Copyright © 2020-2023  润新知