zoukankan      html  css  js  c++  java
  • 面向对象初接触(下)

    当一个类中的属性条件不满足我们的需求时,考虑到为了不破坏封装,从而对其属性进行增加的实现,就有了以下几种方法
     
    猴子补丁
    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
    通过访问控制,暴露适当的数据给用户,隐藏该隐藏的,保护成员或私有成员
  • 相关阅读:
    快速幂 + 矩阵快速幂
    iOS 获取设备的 UDID,安装描述文件、证书
    自定义View 圆角的ImageView
    使用Glide设置view背景
    dp转px,sp转px
    Android注解约束参数为固定的某几个值
    SourceTree回滚远程仓库
    Android加载视频封面的两种方式
    Android Glide加载视频封面
    ios 关于如何在app里面设置版本更新功能
  • 原文地址:https://www.cnblogs.com/spidermansam/p/7822225.html
Copyright © 2011-2022 走看看