zoukankan      html  css  js  c++  java
  • 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
    博客内容用于记录自己学习后的收获,如有侵权请联系我删除
  • 相关阅读:
    CSS3---用户界面
    CSS3---媒体查询与响应式布局
    HDU 5285 wyh2000 and pupil
    POJ 2488 A Knight's Journey
    POJ 1067 取石子游戏
    POJ 2777 Count Color
    POJ 3259 Wormholes
    Project Euler 26 Reciprocal cycles
    POJ 2104 K-th Number
    POJ 1013 Counterfeit Dollar
  • 原文地址:https://www.cnblogs.com/ptxiaochen/p/13644790.html
Copyright © 2011-2022 走看看