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日

相关文章

  • 云原生周刊:Kubernetes v1.27 发布 | 2023.4.17

    开源项目推荐 Palaemon Palaemon 是一个开源开发工具,用于监控 Kubernetes 集群的健康状况和资源指标并分析内存不足 (OOMKill) 错误。 Gitkube Gitkube 是一种使用 git push 将 Docker 镜像构建和部署到 Kubernetes 上的工具。 经过简单的初始设置后,用户可以简单地持续推送他们的仓库来实…

    云计算 2023年4月18日
    00
  • .net core在服务器端获取api传递的参数过程

    下面就是详细讲解“.net core在服务器端获取api传递的参数过程”的攻略: 1. 概述 在ASP.NET Core Web API中,我们通常需要从请求中获取传递过来的参数。这些参数可以来自URL查询字符串、请求头、请求正文等不同的地方。本文将深入讲解ASP.NET Core Web API中获取传递参数的多种方式,并且通过具体的示例进行详细说明。 2…

    云计算 2023年5月17日
    00
  • 职业定位(云计算、并行计算、分布式计算)

    云计算 云计算:http://baike.baidu.com/view/1316082.htm 云平台:http://baike.baidu.com/view/3749171.htm?fr=aladdin 云平台 开发 Intel官网:http://www.intel.cn/content/www/cn/zh/cloud-computing/hybrid-c…

    云计算 2023年4月11日
    00
  • 云计算平台(检索篇)-Elasticsearch-Mapping篇

             Es Mapping篇主要是讲解Mapping的一些相关配置与需要注意的地方,说到Mapping大家可能觉得有些不解,其实我大体上可以将Es 理解为一个数据管理平台,那么index 当然就是库了,type可以理解为表,mapping可以理解为表的结构和相关设置的信息(当然mapping有更大范围的意思)。Mapping的作用域也是从clus…

    云计算 2023年4月10日
    00
  • asp.net HttpHandler操作Session的函数代码

    针对你提出的问题,我将详细讲解关于ASP.NET HttpHandler操作Session的函数代码,以及如何使用该函数代码来操作Session。 什么是ASP.NET HttpHandler? ASP.NET HttpHandler是ASP.NET中的一种处理请求的模块,它可以拦截请求,执行自定义的处理逻辑,并返回响应结果。 在处理HTTP请求的过程中,H…

    云计算 2023年5月17日
    00
  • 基于Python实现股票数据分析的可视化

    让我来详细讲解“基于Python实现股票数据分析的可视化”的完整攻略: 1. 确定需求和准备工作 首先,我们需要明确项目的目的和需求: 目的:实现对股票数据的分析和可视化展示。 需求:获取股票数据、进行数据清洗和处理、分析股票趋势、绘制股票K线图、展示分析结果。 在明确项目需求之后,我们需要进行相关的准备工作: 安装Python和相关库:Python是实现该…

    云计算 2023年5月18日
    00
  • 云计算、SaaS及框计算

         何为框计算?     前几天百度技术大会上,李彦宏提出百度“框计算”,通过百度搜索对话框,理解并给出用户的真实需求。例如,今天几点了,它不会单纯的以匹配关键字加PR(page rank)值的方式给出搜索结果,而是进行自然语义分析,理解用户的语句,给出现在是北京时间几点几刻的具体时间。百度提出“框计算”有借计算炒作的嫌疑。百度真实想表达的是它要努力实…

    云计算 2023年4月10日
    00
  • 阿里云的NoSQL存储服务OTS的应用分析

    阿里云的NoSQL存储服务OTS的应用分析 1. OTS的概述 OTS(Table Store)是阿里云提供的一种分布式NoSQL数据存储服务,具有高可用、高性能、高扩展性等特点。OTS支持多种数据类型,包括字符串、数字、二进制、布尔值等,同时还支持多种数据操作,例如读取、写入、更新、删除等。 2. OTS的应用分析 2.1. OTS的优点 高可用性:OTS…

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