python继承和多态

继承数据的两种方式

class jic:
    def __init__(self):
        self.mystr="zhuan"
        self.money=200000000

class kid(jic):
    def __init__(self):
        jic.__init__(self) #调用父类定义的变量方法一
        #super().__init__()  #调用父类定义的变量方法二
        self.name="kid"
jic1=jic()
jic2=kid()
print(jic1.money)
print(jic2.name)
print(jic2.money)

###############
jic.__init__(self) #调用父类定义的变量方法一
super().__init__()  #调用父类定义的变量方法二

继承的意义 ,代码重用,子类变量如果与父类重名就会覆盖父类


多继承:同时继承两个类的属性和方法

属性是后者覆盖前者(在__init__的顺序)
方法是先到的不会被覆盖(在 girl(dad1,dad2)中的顺序)
class dad1:
    def __init__(self):
        self.money=1000
        self.car="bycicle"
        self.house="laji"
    def buy(self):
        print("nothing")
class dad2:
    def __init__(self):
        self.money = 100000
        self.car = "Benz"
        self.house = "house"
    def bigbuy(self):
        print("eyerything")

class  girl(dad1,dad2):
    def __init__(self):
        dad1.__init__(self)
        dad2.__init__(self)
jt=girl()
print(jt.money)
jt.buy()
jt.bigbuy()


但是不能继承私有变量self.__name
所有的类都是一个默认的父类(object)


类的自身属性
class dec:
    """
    doc写在这里
    """
    def __init__(self):
        pass
print(dec.__doc__)  #类的说明
print(dec.__name__) #类的名字
print(dec.__module__)  #从哪个地方开始执行
print(dec.__bases__)  #类的父类
print(dec.__dict__)  #类的所有属性放在字典


解决父类重复初始化
super().__init() 可以节约内存,只需要用一次就直接重构所有的父类

判断类型
print(isinstance("a",str))  会返回True False
print(isinstance("a",(str,int))) #判断是否为两者其中一个类型

print(isinstance(子类,父类))  True  判断子类属于父类
print(type((son()))==father)  False  是子类与父类的比较,错误
 判断的类如果带(),判断就需要写()


多态
解决软件可拓展性
class server:
    pass

class make1(server):
    def make(self):
        server.__init__(self)
        print("1")
class make2(server):
    def make(self):
        server.__init__(self)
        print("2")

class addmake(server):
    def make(self):
        server.__init__(self)
        print("add")
def makeserver(obj):
    obj.make()
m1=make1()
m2=make2()
m3=addmake()
makeserver(m1)
makeserver(m2)
makeserver(m3)

如果需要增加一个类,直接写入就好,可以直接调用

静态
不需要实例化就可以调用的方法
class People:
    def __init__(self,tall):
        self.tall=tall

    @staticmethod  #静态方法
    def geteyes():
        return 2
    def gettall(self):
        return self.tall
print(People.geteyes())  #通用的东西,静态方法,不需要实例化就可以调用,实例化也可以调用


类的方法
内部方法和外部方法
class wsc:
    def __init__(self):
        self.money=10000
    @classmethod  #标识符,表示内部方法可以省略
    def do(self):
        print("doing")

def getmoney(wsc):  #外部方法,把类当做参数
    return wsc.money
dadada=wsc()
print(getmoney(dadada))  #外部方法用法
dadada.do()  #内部方法的使用


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值