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

yizhihongxing

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日

相关文章

  • 交通银行系统运维服务云计算案例分享

    本文讲的是交通银行系统运维服务云计算案例分享,2012年5月23—25日,主题为“发挥示范引领作用,推动云计算创新实践”的“第四届中国云计算大会”在北京国家会议中心召开。大会将举办七个专题论坛,围绕云计算核心技术架构、云计算与大数据、云计算平台与应用实践、云计算时代的信息安全、云计算数据中心、云计算存储与虚拟化、云计算与移动互联网及新型终端等主题进行深入探讨…

    云计算 2023年4月13日
    00
  • MacOS下C++使用WebRTC注意事项及问题解决

    MacOS下C++使用WebRTC注意事项及问题解决攻略 在MacOS系统下使用C++调用WebRTC功能,需要注意一些问题以确保实现功能的正确性和高效性。 1. WebRTC环境搭建 首先需要在MacOS系统下搭建WebRTC环境。可以参考官方网站上的文档进行安装和配置。在MacOS下搭建WebRTC环境需要注意以下问题: 需要使用XCode工具进行编译。…

    云计算 2023年5月17日
    00
  • 本地 vs. 云:大数据厮杀的最终幸存者会是谁?— InfoQ专访阿里云智能通用计算平台负责人关涛

    摘要: 本地大数据服务是否进入消失倒计时?云平台大数据服务最终到底会趋向多云、混合云还是单一公有云?集群规模增大,上云成本将难以承受是误区还是事实?InfoQ 将就上述问题对阿里云智能通用计算平台负责人关涛进行了专访。 一家企业什么时候会决定上云?过去,这个问题的答案可能是当企业发现需要购买新的硬件进行新一轮资本投入时,往往倾向于考虑另一种替代方案,比如云,…

    云计算 2023年4月13日
    00
  • 看看百度财报中的云计算

    百度发布了Q2季度财务报告。从报告中可以看出,百度第二季度总营收为182.64亿元(约合27.48亿美元),移除去哪儿影响,实际同比增长16.3%。在财报中,百度的网络营销收入同比增长了4.4%,目前百度地图已登陆亚太、欧洲和南美63个海外国家和地区;百度金融也首创秒批、远程预授信等服务,领跑职业教育分期信贷服务市场;百度无人车更是与芜湖市政府、上海国际汽车…

    云计算 2023年4月13日
    00
  • 云计算市场规模庞大 云安全服务面临极大挑战

    随着各大云计算厂商纷纷将自身优秀的IT技术以云服务的模式的开放,越来越多的企业开始重视云计算,以便更好地拥抱云计算,提升自身IT业务的服务能力。在庞大的云计算市场规模下,云安全服务行业应运而生。 云计算市场规模庞大 云安全服务面临极大挑战 近年来,随着互联网云计算领域不断的完善和创新以及用户对个性化业务需求增长,用户对于云计算的需求也更看重云计算的技术应用。…

    云计算 2023年4月13日
    00
  • Effective HPA:预测未来的弹性伸缩产品

    作者 胡启明,腾讯云专家工程师,专注 Kubernetes、降本增效等云原生领域,Crane 核心开发工程师,现负责成本优化开源项目 Crane 开源治理和弹性能力落地工作。 余宇飞,腾讯云专家工程师,专注云原生可观测性、成本优化等领域,Crane 核心开发者,现负责 Crane 资源预测、推荐落地、运营平台建设等相关工作。 田奇,腾讯高级工程师,专注分布式…

    2023年4月9日
    00
  • Java之jpa入门教程讲解

    Java 之 JPA 入门教程讲解 什么是 JPA? JPA(Java Persistence API)是一种规范,它定义了一组 API 去管理 Java 对象和关系型数据库之间的映射,以及持久化 Java 对象到数据库中。JPA 的目的是为了简化持久化操作,提高代码可读性和可维护性。 JPA 的使用步骤 定义并配置实体类 创建 EntityManager …

    云计算 2023年5月17日
    00
  • android通过google api获取天气信息示例

    Android 通过 Google API 获取天气信息示例 在本攻略中,我们将详细讲解如何在 Android 应用程序中通过 Google API 获取天气信息,包括 Google API 的基本概念、使用方法和示例说明。 Google API 基本概念 Google API 是 Google 提供的一组 API,用于访问 Google 的各种服务和数据。…

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