IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python面向对象 (类,继承)牛刀小试 -> 正文阅读

[Python知识库]Python面向对象 (类,继承)牛刀小试

最近在学习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)


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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:35:50  更:2021-07-31 16:36:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/25 14:08:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计