py-面向对象-继承

Python中的继承是面向对象编程(OOP)中的一个核心概念,‌它允许一个类(‌称为子类或派生类)‌从另一个类(‌称为父类或基类)‌继承属性和方法。‌通过继承,‌可以重用代码,‌提高代码的模块化和可维护性。‌在Python中,‌继承是通过语法实现的,‌其中父类提供属性和方法的定义,‌而子类继承父类的属性和方法,‌并根据需要添加或修改这些属性和方法。‌

  1. 多态性:‌多态性是面向对象编程中的一个重要概念,‌它允许我们使用相同的接口处理不同类型的对象。‌在Python中,‌多态性可以通过继承和方法的覆盖来实现。‌例如,‌如果有一个Animal类和Dog类,‌它们都有一个speak方法。‌当我们调用speak方法时,‌Python会根据对象的类型来决定调用哪个类的speak方法。‌

  2. 封装和抽象:‌封装和抽象是面向对象编程中的另外两个重要概念。‌封装是指将属性和方法组合在一起形成一个对象,‌并隐藏内部的实现细节。‌抽象是指定义一个接口但不实现其中的方法,‌让子类去实现这个接口。‌在Python中,‌可以使用类和继承来实现封装和抽象。‌

  3. 多重继承:‌Python支持多重继承,‌即一个类可以继承自多个父类。‌这种机制提供了更大的灵活性,‌允许开发者根据需要组合多个父类的特性。‌

通过继承,‌Python实现了代码的重用和扩展性,‌使得开发更加高效和易于维护。‌同时,‌多态性、‌封装和抽象等概念的应用,‌使得Python的面向对象编程更加丰富和强大

父类

calss Rectangle:

        def __init__(self.lenght,with):初始化方法

                self.length=lenght

                self.width=with

        def perimiter(self):  #计算周长

                return (self.length*self.width)*2

        def features(self):  #计算面积

                return  self.length*self.width

        @classmethod #装饰器,声明下面的方法是类方法

        def features(cls):

                print("两边长相等,两边宽叶相等,长和宽的角度是90度")

rec=Rectangle(10,8)#实例化方法

rec.features()

Rectangle.features()#把features变成类方法类方法既可以由实例调用,也可以由类调用

子类

#写一个正方形
#完全继承

#class Square(Rectangle):    #Rectangle是Square的父类
#    pass
#squ=Squeare(6,6)
#print(squ.perimiter())
#print(squ.area())


#部分继承,重写某些父类
class Square(Rectangle):
    def __init__(self,side):  #初始化方法
        self.length=side    #重新定义长和宽
        self.width=side
squ=Squeare(6)
print(squ.perimiter())
print(squ.area())


#改写父类方法,保留父类方法的同时,加一些子类代码
class Square(Rectangle):
    @Classmethod
    def features(cls):
        super().features() #继承父类features()方法的代码
        print('长和宽也相等')
Square.features()

        

所有的类都是object的子类,一个类无论是否声明机车呢个object,实际上都继承了

class Class2:
    pass
print(class2.__dict__)#显示类的属性
print(class2.__doc__)#显示类的注释
print(class2.__name__)#显示类的名称
print(class2.__base__)#显示父类的名称
print(class2.__bases__)#显示所有父类的名称

多继承

一个类可以有多个父类

调用多个父类中的同名方法是,按继承顺序进行调用

#多继承
class Money1:
    def money(self):
        peint('一个亿')
class Money2:
    def money(self):
        peint('两个亿')

class Human(Money1,Money2):优先输出Money1
    pass

#class Human(Money2,Money1):优先输出Money2
#    pass

man=Human()
man.money()

多态

不同的类中有同名的方法,调用方法时,根据对象的不同,实现操作也不同,称之为多态

比如,调用狗的叫的方法为狗叫,调用猫叫方法为猫叫,简单可以描述为:两个同时受到一件事情的刺激,所作出的相同或不同反应

class Dog:
    def say(self)
        print("汪汪汪")

class Cat:
    def say(self):
        print("喵喵喵")


dog=Dog()
cat=Cat()


def animal_say(obj):
    obj.say()
   
animal_say(dog)
animal_say(cat)

扩展

申明一个方发是一个属性,而不是一个方法

#@property 声明下面的方法是一个属性,而不是方法
class Class1:
    def __init__(self):
        self.a=100
    @property
    def fun2(self):
        return self.a


tt1=Class1()
print(tt1.b())


#@property 增加代码隐蔽性,如果不想让其他人使用或修改这个代码,可以使用这个代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值