• Python面向对象高级编程


    一、实例绑定属性和方法(动态语言特有)

    先定义class:

    class Student(object):
    pass

    给实例绑定一个属性

      >>> s = Student()
      >>> s.name = 'Michael' # 动态给实例绑定一个属性
      >>> print(s.name)
      Michael
    

    给实例绑定一个方法

      >>> def set_age(self, age): # 定义一个函数作为实例方法
      ...     self.age = age
      ...
      >>> from types import MethodType
      >>> s.set_age = MethodType(set_age, s) # 给实例绑定一个方法
      >>> s.set_age(25) # 调用实例方法
      >>> s.age # 测试结果
      25
    

    但是,给一个实例绑定的方法,对另一个实例是不起作用的

    为了给所有实例都绑定方法,可以给class绑定方法:

      >>> def set_score(self, score):
      ...     self.score = score
      ...
      >>> Student.set_score = set_score
    

    2、slots(限制实例的属性)

      class Student(object):
            __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
    

    使用__slots__要注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的

    3、@property

    Python内置的@property装饰器就是负责把一个方法变成属性调用的

    把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作

    还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性

    4、多重继承

    在设计类的继承关系时,通常,主线都是单一继承下来的,例如,Ostrich继承自Bird。但是,如果需要“混入”额外的功能,通过多重继承就可以实现,比如,让Ostrich除了继承自Bird外,再同时继承Runnable。这种设计通常称之为MixIn

    MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系。

    由于Python允许使用多重继承,因此,MixIn就是一种常见的设计。只允许单一继承的语言(如Java)不能使用MixIn的设计。

    5、定制类

    • str
    • repr
    • iter
    • getitem
    • getattr
    • call

    6、枚举类

      from enum import Enum
    
      Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
    

    7、使用元类

    • type

    type()函数可以查看一个类型或变量的类型

    type()函数既可以返回一个对象的类型,又可以创建出新的类型,比如,我们可以通过type()函数创建出Hello类,而无需通过class Hello(object)...的定义

    • metaclass
    博客内容用于记录自己学习后的收获,如有侵权请联系我删除
  • 相关阅读:
    【IHttpHandler】在ASP.Net2.0中使用UrlRewritingNet实现链接重写
    【IHttpHandler】IHttpModule实现URL重写
    【IHttpHandler】使用IHttpHandler防盗链
    【IHttpHandler】HttpModule,HttpHandler,HttpHandlerFactory简单使用
    【IHttpHandler】HttpModule的认识
    【IHttpHandler】了解 IHttpHandler
    【MVC】ASP.NET MVC 请求生命周期
    【MVC】ASP.NET MVC HtmlHelper用法大全
    【MVC】ASP.NET MVC中实现多个按钮提交的几种方法
    【MVC】自定义ASP.NET MVC Html辅助方法
  • 原文地址:https://www.cnblogs.com/ptxiaochen/p/13644790.html
Copyright © 2020-2023  润新知