Python 类的继承

Python 类的继承类的继承继承的概念:类的继承是面向对象编程中的重要概念,它允许我们创建一个新类,该类继承了一个或多个现有类的属性和方法。子类和父类的概念classChildClass(ParentClass):#子类的属性和方法ChildClass子类的名称ParentClass父类的名称子类将

大家好,欢迎来到IT知识分享网。

类的继承

继承的概念:类的继承是面向对象编程中的重要概念,它允许我们创建一个新类,该类继承了一个或多个现有类的属性和方法。

子类和父类的概念

class ChildClass(ParentClass):
    # 子类的属性和方法
ChildClass 子类的名称
ParentClass 父类的名称
子类将继承父类的所有属性和方法,并且可以添加自己的属性和方法。
子类可以覆盖父类的方法和属性,这意味着子类可以重新定义一个父类相同名称的方法和属性,可以使子类在需要时修改父类的行为
注意点:父类中的私有属性不能继承
具体例子:
#定义一个Woman类
class Woman:
    # 该类的共有属性
    gender=""
    # 共有属性,不同个体有所不同(对象的实例化过程)height=160 默认参数
    def __init__(self,age=18,character="干净利落",education="本科",height=160,eat="牛排"):
        '''
        age:年龄
        height:身高
        character:性格
        education:学历
        '''
        self.age=age
        self.height=height
        self.character=character
        self.education=education
        self.eat=eat
    @property
    def play(self):
        self.plays="游玩的地方"
        print("这是喜欢游玩的地方")
    @classmethod
    def eat01(cls):
        print(cls.gender)
        pass
        print("这是喜欢吃的食物")
    @staticmethod
    def scenery():
        print("这是凤凰岭风景区")
    def work(self,name,works,hobby):
        self.score=100
        #类,方法之间的调用
        self.eat01()
        print("{0}女士,拥有{1}学历,性格{2},在{3}工作~,她的爱好{4},嘿嘿!我还知道她喜欢吃{5}".format(name, self.education, self.character, works,hobby,self.eat))


#定义一个时尚的女人对象

class FashionWoman(Woman):
    
    def fashion_outfit(self,name,attire,bag):
        print("{}女士,是个时尚的人,经常身穿{},背着{},看起来很时尚".format(name,attire,bag))



if __name__ == '__main__':
  
#FashionWoman 子类,继承了父类 Woman ,传值时,需要同Woman一致
    Lina = FashionWoman().fashion_outfit("小李","酷炫","运动")
    print(Lina)
    Lan = FashionWoman(22, "luoluodafang", "本科").fashion_outfit("小丽", "港风", "LV")
    print(Lan)
 #子类调用父类的work方法
    Li = FashionWoman().work("小张",works="中国联通",hobby="榴莲")

输出结果:

Python 类的继承

 子类继承了父类,子类就可以调用父类的所有属性和方法

子类定义的方法,父类不能调用子类的方法,继承是单向的,子类继承父类

具体调用如下:

fashion_outfit 是  FashionWoman  子类定义的方法

Python 类的继承

 

2、子类可以自己定义 __init__  实类属性

当 子类 与 父类 存在相同的 属性名和方法名时,相同的属性和方法,父类使用父类的,子类使用子类的,子类不能再使用父类的。

要点:子类覆盖父类的方法,即为 重写

具体例子如下:

class Woman:
    # 该类的共有属性
    gender=""
    # 共有属性,不同个体有所不同(对象的实例化过程)height=160 默认参数
    def __init__(self,age=18,character="干净利落",education="本科",height=160,eat="牛排"):
        '''
        age:年龄
        height:身高
        character:性格
        education:学历
        '''
        self.age=age
        self.height=height
        self.character=character
        self.education=education
        self.eat=eat
    @property
    def play(self):
        self.plays="游玩的地方"
        print("这是喜欢游玩的地方")
    @classmethod
    def eat01(cls):
        print(cls.gender)
        pass
        print("这是喜欢吃的食物")
    @staticmethod
    def scenery():
        print("这是凤凰岭风景区")
    def work(self,name,works,hobby):
        self.score=100
        #类,方法之间的调用
        self.eat01()
        print("{0}女士,拥有{1}学历,性格{2},在{3}工作~,她的爱好{4},嘿嘿!我还知道她喜欢吃{5}".format(name, self.education, self.character, works,hobby,self.eat))


#时尚的女人

class FashionWoman(Woman):

#给 FashionWoman 定义属于自己的实类属性
    def __init__(self,age,name):
        self.age = age
        self.name = name


    def fashion_outfit(self,name,attire,bag):
        print("{}女士,是个时尚的人,经常身穿{},背着{},看起来很时尚".format(name,attire,bag))

#定义属于自己的work 方法
    def work(self):
        print("我们每天都应该好好的工作,这个是{}说的,她也只有{}岁".format(self.name,self.age))
        return self.name,self.age




if __name__ == '__main__':

#FashionWoman 实类属性只能使用自己的
    Lina = FashionWoman(name="Lina",age=12).fashion_outfit("小李","酷炫","运动")
    print(Lina)
    Lan = FashionWoman(22, "luoluodafang").fashion_outfit("小丽", "港风", "LV")
    print(Lan)

# 调用Woman的方法报错
    # Li = FashionWoman().work("小张",works="中国联通",hobby="榴莲")
    # print(Li)

#FashionWoman 实类属性只能使用自己的,work方法也使用自己的
    Nan = FashionWoman(name="Lina",age=12).work()
    print(Nan)

 

原有 FashionWoman 的调用  Womanwork方法 报错

Python 类的继承

 

3、两层继承,子类没有的方法,可以找父类的父类(也就是,可以调用上上级的方法)

具体例子:

class Pepole:
    # 定义类属性
    eye="黑色"
    toufa="黑色"
    pifu="黄色"

    def shuxing_01(self, username):
        self.username = username
        '判断属性的方法'
        self.shuxing = input("请输入你的性别,我们鉴定你的属性:")
        if self.shuxing == "":
            print("你是大帅哥")
        elif self.shuxing == "":
            print("你是大美女")
        else:
            print("请从新审视你的性别,谢谢")
        s = "{0}你好,我们将会保存你的属性类别为:{1}".format(self.username, self.shuxing)
        print(s)

#Woman 的父类  Pepole

class Woman(Pepole):
    # 该类的共有属性
    gender=""
    # 共有属性,不同个体有所不同(对象的实例化过程)height=160 默认参数
    def __init__(self,age=18,character="干净利落",education="本科",height=160,eat="牛排"):
        '''
        age:年龄
        height:身高
        character:性格
        education:学历
        '''
        self.age=age
        self.height=height
        self.character=character
        self.education=education
        self.eat=eat
    @property
    def play(self):
        self.plays="游玩的地方"
        print("这是喜欢游玩的地方")
    @classmethod
    def eat01(cls):
        print(cls.gender)
        pass
        print("这是喜欢吃的食物")
    @staticmethod
    def scenery():
        print("这是凤凰岭风景区")
    def work(self,name,works,hobby):
        self.score=100
        #类,方法之间的调用
        self.eat01()
        print("{0}女士,拥有{1}学历,性格{2},在{3}工作~,她的爱好{4},嘿嘿!我还知道她喜欢吃{5}".format(name, self.education, self.character, works,hobby,self.eat))


#时尚的女人

class FashionWoman(Woman):
    def __init__(self,age,name):
        self.age = age
        self.name = name


    def fashion_outfit(self,name,attire,bag):
        print("{}女士,是个时尚的人,经常身穿{},背着{},看起来很时尚".format(name,attire,bag))

    def work(self):
        print("我们每天都应该好好的工作,这个是{}说的,她也只有{}岁".format(self.name,self.age))

        return self.name,self.age




if __name__ == '__main__':

#FashionWoman 调用父类的父类的方法
    Loo = FashionWoman(name="Lina",age=12).shuxing_01("用户的姓名:LOO")
    print(Loo)


输出结果:

请输入你的性别,我们鉴定你的属性:女
你是大美女
用户的姓名:LOO你好,我们将会保存你的属性类别为:女
None

 

4、super() 函数    超继承,不需要传参数

使用父类当中的方法,简化父类方法调用的过程

super() 函数只能是调用父类的方法  (不能越级调用父类的父类)

super()函数 表示想用父类的所有方法(类方法、实例方法、静态方法),代表的就是一个对象或者类

总结:

1、super() 子类使用super()函数,继承父类的方法,如果父类的方法里是传参数的,子类方法也要正常传参数

 具体的使用方式:

class Woman(Pepole):
    # 该类的共有属性
    gender=""
    # 共有属性,不同个体有所不同(对象的实例化过程)height=160 默认参数
    def __init__(self,age=18,character="干净利落",education="本科",height=160,eat="牛排"):
        '''
        age:年龄
        height:身高
        character:性格
        education:学历
        '''
        self.age=age
        self.height=height
        self.character=character
        self.education=education
        self.eat=eat
    @property
    def play(self):
        self.plays="游玩的地方"
        print("这是喜欢游玩的地方")
    @classmethod
    def eat01(cls):
        print(cls.gender)
        pass
        print("这是女生都喜欢吃的食物")
    @staticmethod
    def scenery():
        print("这是凤凰岭风景区")
    def work(self,name,works,hobby):
        self.score=100
        #类,方法之间的调用
        self.eat01()
        print("{0}女士,拥有{1}学历,性格{2},在{3}工作~,她的爱好{4},嘿嘿!我还知道她喜欢吃{5}".format(name, self.education, self.character, works,hobby,self.eat))


#时尚的女人

class FashionWoman(Woman):
    def __init__(self,age,name):
        self.age = age
        self.name = name


    def fashion_outfit(self,name,attire,bag):
        print("{}女士,是个时尚的人,经常身穿{},背着{},看起来很时尚".format(name,attire,bag))

    def work(self):

#父类方法的调用  Woman 的  eat01 方法
        super().eat01()
        print("我们每天都应该好好的工作,这个是{}说的,她也只有{}岁".format(self.name,self.age))

        return self.name,self.age



if __name__ == '__main__':

#调用
    Nan = FashionWoman(name="Lina",age=12).work()
    print(Nan)



#输出结果

女
这是女生都喜欢吃的食物
我们每天都应该好好的工作,这个是Lina说的,她也只有12岁
('Lina', 12)

 super()函数 表示想用父类的所有方法(类方法、实例方法、静态方法),代表的就是一个对象或者类

class FashionWoman(Woman):
    def __init__(self,age,name):
        self.age = age
        self.name = name
#调用父类的实类方法
        super().__init__()



    def fashion_outfit(self,name,attire,bag):
        print("{}女士,是个时尚的人,经常身穿{},背着{},看起来很时尚".format(name,attire,bag))

    def work(self):

#调用父类的eat01方法
        super().eat01()

#调用父类的work方法
        super().work(name="lanlan",works="baidu",hobby="xuexi")
        print("我们每天都应该好好的工作,这个是{}说的,她也只有{}岁".format(self.name,self.age))

        return self.name,self.age


if __name__ == '__main__':

    Nan = FashionWoman(name="Lina",age=12).work()
    print(Nan)


#输出结果

女
这是女生都喜欢吃的食物
lanlan女士,拥有本科学历,性格干净利落,在baidu工作~,她的爱好xuexi,嘿嘿!我还知道她喜欢吃牛排
我们每天都应该好好的工作,这个是Lina说的,她也只有18岁

 

拓展知识

 动态获取属性:  getattr () 内置函数,用于动态返回一个对象属性值

getattr()的源码

入参解释:

object 对象   

name  字符串,对象属性

default   默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError

Python 类的继承

 

动态获取对象属性

具体例子如下:

class FashionWoman(Woman):
    def __init__(self,age=18,name="蓝庭旭"):
        self.age = age
        self.name = name
        super().__init__()



    def fashion_outfit(self,name,attire,bag):
        print("{}女士,是个时尚的人,经常身穿{},背着{},看起来很时尚".format(name,attire,bag))

    def work(self):
        super().eat01()
        super().work(name="lanlan",works="baidu",hobby="xuexi")
        print("我们每天都应该好好的工作,这个是{}说的,她也只有{}岁".format(self.name,self.age))

        return self.name,self.age


#方法调用
if __name__ == '__main__':

    AA = FashionWoman()
    print(getattr(AA,"name"))



#结果输出

蓝庭旭

 

动态设置属性 :setattr()内置函数,设置的属性就存在了,可以访问

具体例子如下:

class FashionWoman(Woman):
    def __init__(self,age=18,name="蓝庭旭"):
        self.age = age
        self.name = name
        super().__init__()



    def fashion_outfit(self,name,attire,bag):
        print("{}女士,是个时尚的人,经常身穿{},背着{},看起来很时尚".format(name,attire,bag))

    def work(self):
        super().eat01()
        super().work(name="lanlan",works="baidu",hobby="xuexi")
        print("我们每天都应该好好的工作,这个是{}说的,她也只有{}岁".format(self.name,self.age))

        return self.name,self.age


if __name__ == '__main__':

#属性的设置
    AA = FashionWoman()
    print(getattr(AA,"name"))
    print(setattr(AA,"color","red"))
    print(AA.color)


#输出结果
蓝庭旭
None
red

 总结:

getattr() : 1、动态获取属性(已经存在的) 2、动态设置时,不存在的属性,返回默认值

setattr() :  动态设置不存在的属性,设置完该属性,该属性就会存在,可以进行访问.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30824.html

(0)
上一篇 2023-10-24 22:33
下一篇 2023-10-26 18:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信