Discuss / Python / 多重继承语言支持MixIn

多重继承语言支持MixIn

Topic source

久疤_796

#1 Created at ... [Delete] [Delete and Lock User]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'多重继承'

__author__ = 'HZF'

class MuObj(object):
    def __init__(self,name):
        self.name = name
    @property
    def mclass(self):
        return self.__class__.__name__
    @property
    def name(self):
        return self.__name
    @name.setter
    def name(self,name):
        if not isinstance(name,str):
            raise ValueError('name must be a string!')
        for c in name:
            if c in ',. \'\"*\r\t\n\\\/':
                raise ValueError('name con\'t have special character:[%s]'%c)
        self.__name = name

class Biology(MuObj):
    def __init__(self,name,age=0):
        self.name = name
        self.age = age  
    @property
    def age(self):
        return self.__age
    @age.setter
    def age(self,age):
        if not isinstance(age,int):
            raise ValueError('age must be an integer!')
        if age<0:
            raise ValueError('age must not less than 0!')
        self.__age = age
class RunnableMixIn(MuObj):
    def run(self):
        print('%s %s is running...' %(self.mclass,self.name))
class FlyableMixIn(MuObj):
    def fly(self):
        print('%s %s is flying...' %(self.mclass,self.name))

class Animal(Biology,RunnableMixIn):
    def __init__(self,name,age=0):
        Biology.__init__(self,name,age)
class Bird(Animal,FlyableMixIn):
    def __init__(self,name,age=0):
        Animal.__init__(self,name,age)

bird = Bird('bird',1)
bird.run()
bird.fly()
print(bird.mclass)
ani = Animal('Dog',3)
ani.run()
#'Animal' object has no attribute 'fly'
#ani.fly()
ani.__class__ = Bird
print(type(ani),ani.mclass,ani.name)
ani.run()
ani.fly()

#python自带的网络服务
#TCPServer and UDPServer

#python自带的多进程、多线程模型
#ForkingMixIn and ThreadingMixIn

#通过组合,我们就可以创造出合适的服务来。

久疤_796

#2 Created at ... [Delete] [Delete and Lock User]
ani.__class__ = Bird

这之类的动作,还是少做为妙

ani.__class__ = Bird

确实,这样动态改变类型有点过分了,虽然会报错,但是很容易引起混乱。

请问 ani = Animal('Dog',3) 里面的参数是什么意思呢


  • 1

Reply