Python基础(14):面向对象高级(多重继承,定制类,枚举类,元类)

版权声明:转载请注明来处 https://blog.csdn.net/Daisy_zye/article/details/84791704

一,多重继承

定义:一个子类可以继承自多个父类

目的:同时拥有多个父类的所有功能,且减少设计层次。

Mixln:某子类中,需要混入额外功能,可以通过多重继承实现,这种设计,被叫做Mixln

二,定制类

解释:通过魔术方法的定义,是自定义的类满足某些特性。

__str__:调用print函数时,实现友好输出。  

__repr__:直接调用对象时,实现友好输出。

示例:

不定义直接返回

class Student(object):
    pass
s=Student()              #实例化
s                        #返回结果:<write_blog.定制类.Student object at 0x000001C620AFE780>
print(s)                 #返回结果:<write_blog.定制类.Student object at 0x000001C620AFE780>

定义以上两个方法:

class Student(object):
    def __init__(self,name):
        self.name=name
    def __repr__(self):
        return 'my name is Student %s'%self.name
    def __str__(self):
        return 'this is a student object %s'%self.name
s=Student('xiaoxinxin')              #实例化
s                        #返回结果:my name is Student xiaoxinxin
print(s)                 #返回结果:this is a student object xiaoxinxin

__iter__:将对象变为可迭代对象。

__getitem__:可以根据索引取对象中的值。

示例:

class Student(object):
    
    def __iter__(self):  
        return self
    def __getitem__(self, item):
        return 'a'
s=Student()
isinstance(s,Iterable)        #返回True
s[1]                          #返回a

__setitem__:把对象视作list或dict来对集合赋值。

__delitem__:用于删除某个元素。

示例:

   def __setitem__(self, key, value):
        self.key=value
        return self
    def __delitem__(self, key):
        del self.key
        return self

__getattr__:对象中不包含某个属性时,为了不使其报错,可以定义此函数,用于友好返回。

__call__:直接用实例调用时,进行的操作,例如一个Student类的对象s,在用s()调用时,需要进行的操作。

示例:

 def __getattr__(self, item):
        if item=='score':
            return 99
    def __call__(self, *args, **kwargs):
        return '为%s疯狂打call'%self.name

三,枚举类

枚举:一个有穷序列,每一个元素是一个常数声明。

枚举的应用场景:一个变量,有几种常用的取值。

枚举类的主要用途:定义常量。

示例:

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)

四,元类

定义:用metaclass函数,定义对类的某些限制。

用法:先定义一个metaclass类,里面包含某种限制,再定义一个子类,然后利用metaclass参数,指向该元类。子类就可以实现元类中的限制。

目的:通过元类,修改类定义。

主要应用案例:ORM。

class ListMetaclass(type):
    def __new__(cls, name, bases, attrs):
        attrs['add'] = lambda self, value: self.append(value)
        return type.__new__(cls, name, bases, attrs)
class MyList(list, metaclass=ListMetaclass):
    pass

猜你喜欢

转载自blog.csdn.net/Daisy_zye/article/details/84791704