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)
在上述代码中,定义了三个类:Book
、EBook
和Library
。
Book
和EBook
是图书的基础类和子类,其中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())
在上述示例中,定义了四个类:Employee
、Manager
、Salesman
和Engineer
。
Employee
是员工基础类,其他三个类都扩展自该类。Manager
、Salesman
和Engineer
分别定义三种不同类型的员工,并重写了其父类的get_salary()
方法。
Company
类是一个存储员工的容器,其中有add_employee()
和get_salaries()
两个方法,分别用于添加和获取员工列表。
在使用示例中,我们使用Company
类创建一个company
实例,并添加了三个不同类型的员工。然后,使用get_salaries()
方法获取所有员工的工资总和,并以打印出来。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python面向对象class类属性及子类用法分析 - Python技术站