Python面向对象class类属性及子类用法分析

Python面向对象class类属性及子类用法分析

在Python中,面向对象编程是一种强大的编程方法,其中class类是面向对象编程的基本单位。

本文将讲解Python中的class类属性及其子类用法,以及提供两个示例说明。

Class类属性

class类能够定义变量,也就是属性。这些属性通常是定义在class的方法之外的,因此是公用的,即被所有的实例对象共享。

以下是一个class类的例子,其中定义了一个类属性count

class ExampleClass:
    count = 0

    def __init__(self):
        ExampleClass.count += 1

    def set_ordinal(self, ordinal):
        self.ordinal = ordinal

# 使用示例
e1 = ExampleClass()
e2 = ExampleClass()
print(e1.count) # 输出2
print(e2.count) # 输出2

在上述示例中,count是一个类属性,初始化时值为0,每创建一个实例对象,set_ordinal()方法会自动增加1。

子类用法

在Python中,可以通过继承来创建子类。子类(subclass)可以使用和扩展父类(superclass)的方法和属性,还可以定义自己的方法和属性。

以下是一个使用继承方式创建子类的例子:

class Animal:
    def __init__(self, name):
        self.name = name

    def make_sound(self):
        pass # 声音

class Dog(Animal):
    def make_sound(self):
        print("汪汪汪!")

class Cat(Animal):
    def make_sound(self):
        print("喵喵喵!")

# 使用示例
d = Dog("旺财")
c = Cat("小花")

d.make_sound() # 输出 "汪汪汪!"
c.make_sound() # 输出 "喵喵喵!"

在上述示例中,创建了一个Animal类,其中有一个名为make_sound()的方法,但没有定义具体的实现。然后,通过继承Animal类,扩展出Dog类和Cat类,并分别实现其make_sound()方法。

调用子类实例对象的make_sound()方法,该方法会覆盖其父类的实现,从而输出不同的声音。

示例1:优化图书管理系统

使用面向对象编程的优点之一是可以更好地组织代码,特别是对于需要实现多个相关数据类型的应用程序。

以下是一个图书管理系统的示例,它使用类和子类来更好地组织代码,并增加了一些功能:

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages

    def __str__(self):
        return f"{self.title} by {self.author} ({self.pages} pages)"

class EBook(Book):
    def __init__(self, format, *args):
        super().__init__(*args)
        self.format = format

    def __str__(self):
        return super().__str__() + f" [eBook in {self.format}]"

class Library:
    def __init__(self):
        self.books = []

    def add_book(self, book):
        self.books.append(book)

    def get_books(self):
        return self.books

# 使用示例
library = Library()
library.add_book(Book("The Divine Comedy", "Dante Alighieri", 798))
library.add_book(EBook("PDF", "The Alchemist", "Paulo Coelho", 113))
library.add_book(Book("Pride and Prejudice", "Jane Austen", 432))

print("当前所有书籍:")
for book in library.get_books():
    print(book)

在上述代码中,定义了三个类:BookEBookLibrary

BookEBook是图书的基础类和子类,其中EBook类扩展自Book类,添加属性format(电子书的格式),并以[eBook in {format}]的形式添加到__str__()方法的结尾。

Library类是一个存储图书的容器,其中有add_book()get_books()两个方法,分别用于添加和获取图书列表。

在使用示例中,我们创建了一个library实例,并添加了三个图书。然后,使用get_books()方法获取所有图书,并以__str__()方法定义的格式打印出来。

示例2:优化公司管理系统

假设一个公司有多种类型的员工,包括管理人员、销售人员和技术人员。为了更好地管理这些员工,我们可以使用面向对象编程中的继承方式,创建类并定义具体实现。

以下是一个示例程序,展示了如何使用Python的继承来创建并组织公司员工:

class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

    def get_salary(self):
        return self.salary

class Manager(Employee):
    def __init__(self, name, salary, bonus):
        super().__init__(name, salary)
        self.bonus = bonus

    def get_salary(self):
        return super().get_salary() + self.bonus

class Salesman(Employee):
    def __init__(self, name, salary, commission):
        super().__init__(name, salary)
        self.commission = commission

    def get_salary(self):
        return super().get_salary() + self.commission

class Engineer(Employee):
    pass # 技术人员

class Company:
    def __init__(self):
        self.employees = []

    def add_employee(self, employee):
        self.employees.append(employee)

    def get_salaries(self):
        return sum([emp.get_salary() for emp in self.employees])

# 使用示例
company = Company()
company.add_employee(Manager("Allen", 120000, 20000))
company.add_employee(Salesman("Tom", 50000, 2000))
company.add_employee(Engineer("Jerry", 60000))

print("员工工资总和:", company.get_salaries())

在上述示例中,定义了四个类:EmployeeManagerSalesmanEngineer

Employee是员工基础类,其他三个类都扩展自该类。ManagerSalesmanEngineer分别定义三种不同类型的员工,并重写了其父类的get_salary()方法。

Company类是一个存储员工的容器,其中有add_employee()get_salaries()两个方法,分别用于添加和获取员工列表。

在使用示例中,我们使用Company类创建一个company实例,并添加了三个不同类型的员工。然后,使用get_salaries()方法获取所有员工的工资总和,并以打印出来。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python面向对象class类属性及子类用法分析 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • python爬虫利用代理池更换IP的方法步骤

    下面是详细讲解“python爬虫利用代理池更换IP的方法步骤”的攻略: 一、什么是代理池? 代理池(Proxy Pool),指的是一组高可用、可靠的代理IP集合。爬虫在爬取网站数据时,可以通过代理池获取可用的代理IP,从而实现更换IP的目的,保证爬虫的正常运行。 二、代理池的搭建 代理池的搭建可以通过第三方库 ProxyPool 来完成,该库可以自动从互联网…

    云计算 2023年5月17日
    00
  • 详解ASP.NET WEB API 之属性路由

    详解ASP.NET WEB API 之属性路由 什么是属性路由? ASP.NET WEB API 是一种开发 Web API 的框架。它主要通过控制器和方法来定义和处理 HTTP 请求。而属性路由是一种通过属性来处理 HTTP 请求的方式。属性路由是 ASP.NET WEB API 2 中的新功能,它允许我们在控制器和方法上使用基于属性的 URL 映射规则。…

    云计算 2023年5月17日
    00
  • ASP.NET图片上传实例(附源码)

    下面是详细讲解“ASP.NET图片上传实例(附源码)”的完整攻略: ASP.NET图片上传实例(附源码)攻略 简介 ASP.NET图片上传是一个非常常见的需求,本文将介绍ASP.NET如何实现图片上传,并附上完整的源码。本示例使用C#编程语言,在Visual Studio 2019下开发。 准备工作 在开始之前,我们需要准备一些材料: Visual Stud…

    云计算 2023年5月17日
    00
  • 云计算浅谈之一:云计算介绍

      微软前一段通知,微软的云计算平台windows azure在中国的服务将会于10月1日开通。微软承诺未来90%的开发人员将从事云计算方面的工作。在这个重要的时刻,是时候提醒更多的开发人员做技术上的更新。上月有机会受邀为某培训机构的软件专业暑期班开设云计算讲座,遂将过去的工作总结了一下,发现自己都获益匪浅.现在以连载方式的发表(共五讲),以润读者.    …

    云计算 2023年4月11日
    00
  • 浅谈:Hadoop、spark、SaaS、PaaS、IaaS、云计算

    Hadoop & Spark首先二者均不是属于产品类别,理解为生态系统或者也有人将其称为“大数据通用处理平台”也是可以的,这种称呼也更为准确Hadoop是由Apache基金会所开发的分布式系统基础架构Hadoop主要包括:Hadoop分布式文件系统:一个分布式的、面向块的、不可更新的、高度伸缩性的、可运行在集群中普通硬盘上的文件系统MapReduce…

    云计算 2023年4月13日
    00
  • c# 通过WinAPI播放PCM声音

    下面就是一篇详细讲解“c# 通过WinAPI播放PCM声音”的完整攻略。 1. 背景知识 在开始讲解之前,我们需要了解一些背景知识:PCM(Pulse Code Modulation)脉冲编码调制,是一种数字音频编码方式,将模拟声音信号转换为数字信号,并以数字的形式进行存储和传输。在WinAPI中,我们可以使用waveOut API来播放PCM声音。 2. …

    云计算 2023年5月17日
    00
  • 【Docker】镜像制作和管理

    一、Docker镜像说明 二、基于容器通过 docker commit 手动制作镜像 1、基于容器手动制作镜像步骤 1、下载官方系统镜像 2、基于官方基础镜像启动容器,并进入容器 3、在容器中进行配置操作   3.1、安装基础工具   3.2、配置运行环境   3.3、安装并配置服务   3.4、存放业务程序代码 4、docker commit 提交生成新镜…

    云计算 2023年4月27日
    00
  • 区块链CHAT是什么币?CHAT币官网总量和上架交易所介绍

    区块链CHAT是什么币? 区块链CHAT是一种基于区块链技术的数字货币,它的全称是ChatCoin。CHAT币的官网是https://www.openchat.co/,总量为21亿枚。CHAT币已经上架了多个交易所,包括Binance、Huobi、Gate.io等。 CHAT币的特点 CHAT币的特点如下: 基于区块链技术,具有去中心化、安全、透明等特点。 …

    云计算 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部