python学习---5

面向对象高级编程

1)给类或者实例绑定一个方法

from types import MethodType

给实例绑定:

s.set_age=MethodType(set_age,s,Student)
set_age:函数
s 实例
Student:类名

给类绑定

Student.set_age=MethodType(set_age,None,Student)

2)使用__slots__

限制class的属性,规定哪几个属性可以在创建实例的时候添加属性。

3)使用@property

装饰器,既能检查参数,又可以用类似属性的方法来调用访问类的变量

实现方式:

@property  把一个getter方法变成属性

@xxx.setter 由@property创建出来的另外一个装饰器。负责把setter变成属性用来赋值

xxx就是函数名了。保持一致

eg:

class Student(object):

    @property
    def score(self):
        return self._score    @score.setter
    def score(self, value):
        if not isinstance(value, int):            
            raise ValueError('score must be an integer!')        
        if value < 0 or value > 100:            
            raise ValueError('score must between 0 ~ 100!')
        self._score = value

4)多重继承

class bat(mammal,flyable)

Mixin 迷信 

多重继承有几个缺点。

结构复杂化,多个父类又有父类,就很复杂

顺序模糊,先继承谁,不清楚

功能冲突,相同方法名,该使用谁的方法


继承用单一继承

两个以上的多重继承必须用迷信继承


Mix-in 类是具有以下特征的抽象类:

    不能单独生成实例;

    不能继承普通类。

关于迷信继承:

http://snoopyxdy.blog.163.com/blog/static/6011744020146311737593/

5)定制类

__slots__()

__len__()

__str__()

__iter__()

__getitem__()

__getattr__()

__call__()

6)type() and metaclass

type讲解了由类到创建实例的过程

metaclass主要用于操作数据库

ORM框架


本文出自 “ehealth” 博客,谢绝转载!

你可能感兴趣的:(测试)