Python面向对象 (类,继承)牛刀小试

这篇博客介绍了Python中的面向对象编程,特别是继承的概念。通过定义一个`Shape`基类,派生出`Rectangle`、`Square`、`Circle`和`Annulus`类,实现了几何图形的面积和周长计算。文章强调了继承如何提高代码的可重用性和可扩展性,并展示了如何在子类中调用父类方法。同时,博客也讨论了继承可能导致类爆炸式增长的问题,提出了‘多用组合少用继承’的原则。
摘要由CSDN通过智能技术生成

最近在学习Python函数和面向对象,其实对于新手的我来说还是有点让我迷茫的,不过经过这两天的学习我找一个了例题给大家分享一下。

                  

 

以点(Point)类为基类,重新定义矩形类和圆类。点为直角坐标点,矩形水平放置,由左
下方的顶点和长宽定义。圆由圆心和半径定义。派生类操作判断任一坐标点是在图形内,还
是在图形的边缘上,还是在图形外。编程测试类设计是否正确。

class Shape :                      #定义形状类并写计算周长面积的方法
    def area(self):
        pass
    def perimeter(self):
        pass

class Rectangle(Shape):             #定义长方形继承shape
    c =  0
    k = 0

    def __init__(self,c,k):
        self.c = c
        self.k = k

    def area(self):
        return self.c * self.k

    def perimeter(self):
        return 2 * self.c + 2 * self.k

class Square(Shape):            #此处继承的还是shape,此处还有一个思路就是
    side = 0                    #将长方形的长或者宽定义为私有的属性,正方形可以继承长方形
    def __init__(self,side):
        self.side = side

    def area(self):
        return self.side**2

    def perimeter(self):
        return  4 * self.side

class Circle(Shape):      #圆形和矩形没有相同属性,所以不继承
    r = 0
    def __init__(self,r):
        self.r = r
    def area(self):
        return self.r**2 * 3.14
    def perimeter(self):
        return self.r * 2 * 3.14

class Annulus(Circle):     #圆环和圆形有共有属性半径,但是圆环还要定义一个新的属性
    r1 = 0
    def __init__(self,r,r1):
        super().__init__(r)
        self.r1 = r1

    def area(self):
        return super().area() - 3.14 * self.r1**2

    def perimeter(self):
        return super().perimeter() + self.r1 * 2 *3.14
rectangle = Rectangle(10,5)
print(rectangle.perimeter())
print(rectangle.area())

square = Square(4)
print(square.area())
print(square.perimeter())

circle = Circle(1)
print(circle.area())
print(circle.perimeter())

annulus = Annulus(20,10)
print(annulus.perimeter())
print(annulus.area())


在加一些继承的知识点吧!!!!

单继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承用于指定一个类将从其父类获取其大部分或全部功能。
它是面向对象编程的一个特征。这是一个非常强大的功能,方便用户对现有类进行几个或多个修改来创建一个新的类。新类称为子类或派生类,从其继承属性的主类称为基类或父类。
子类或派生类继承父类的功能,向其添加新功能。 它有助于代码的可重用性。
继承的语法如下所示。
1  class 派生类(基类1,基类2,...):
2  派生类类内语句
class 派生类(基类):
派生类类内语句
只需要继承基类这个动作,就可以访问到基类的属性和方法了,它提高了代码的可扩展性。
如果派生类中有__init__()方法,那么基类的__init__()方法不会被自动调用,它需要在其派生类的构造中专门调用。 •
如果派生类中没有__init__()方法,且基类中有__init__()方法,那么基类的__init__()方法会被自动调用 •
调用父类的方法有三种: •
方法1:
父类名字.父类中的方法名(self,[参数1,参数2,参数3,……])
方法2:
super().父类中的方法名([参数1,参数2,参数3,……])
方法3:
super(当前类的名字,self).父类中的方法名([参数1,参数2,参数3,……])
在python中继承中的一些特点:
Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。 •

 

class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
print("Person类__init__()。", "姓名:", self.name)
class Student(Person):
def __init__(self, name, gender, score):
super().__init__(name, gender)
self.score = score
print("Student类__init__()。", "姓名:", self.name)
student = Student('tom','male',10)


任何事情都有利有弊:继承的一个弱点就是,可能特殊的类又有其他特殊的地方,又会定义一个类,其下也可能再定义类,
这样就会造成继承的那条线越来越长,使用继承的话,任何一点小的变化也需要重新定义一个类,很容易引起类的爆炸式增长,
产生一大堆有着细微不同的子类。所以有个“多用组合少用继承”的原则。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值