如何理解万物皆对象?
生活中一些事物,动物(可爱的小狗、调皮的小猫)、交通工具(比亚迪U8汽车、飞机)、人(学生、教师)……
这些对象都有着独特或共性的属性和方法来描述其特征和行为。
类定义
将上述图片可以分类,动物类、交通工具类、人类……
类是一种用来创建对象的蓝图或模板,定义了对象的属性和方法,并通过实例化来创建具体的对象
作用:使代码更加模块化、可维护和可扩展
通过定义类,则可以创建多个具有相同属性和方法的对象,这些对象被称为类的实例。例如,定义一个名为“Person”的类,然后创建多个不同的人的实例,如学生、教师、校长、主任……
定义类的语法结构
class ClassName:
# 类属性
name=“test”
# 初始化方法
def __init__(self, parameters):
# 类方法
def method_name(self, parameters):
语法解析
3)在类体中,可以定义类的属性和方法。
4)类属性是属于类本身的属性,可以被所有该类的实例共享。
类体中的 __init__() 方法是一个特殊的方法,也被称为构造方法或初始化方法,它在创建对象时被自动调用, self 参数代表当前对象本身,用于引用对象的属性和方法。其他参数用于接受传递给初始化方法的值
示例定义一个人类,当然也可以定义动物类、交通工具类……
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print("Hello, my name is", self.name)
print("I am", self.age, "years old.")
# 创建一个Person类的实例,李小龙是人类的一个对象,还可以创建张三、李四……
person = Person(“李小龙", 80)
# 访问实例的属性
print(person.name) # 输出:李小龙
print(person.age) # 输出:80
# 调用实例的方法
person.say_hello()
# 输出:Hello, my name is李小龙
# I am 80 years old.
以订单管理系统为例,创建一个名为“Order”的类,订单对象具有订单号、客户姓名和订单金额等属性,同时具有处理支付、生成发票和发送确认邮件等方法,示例如下:
class Order:
def __init__(self, order_id, customer_name, total_amount):
self.order_id = order_id
self.customer_name = customer_name
self.total_amount = total_amount
def process_payment(self):
print(f"正在处理订单 {self.order_id} 的支付,付款金额为 {self.total_amount}")
# 具体的支付逻辑
def generate_invoice(self):
print(f"正在生成订单 {self.order_id} 的发票")
# 具体的发票生成逻辑
def send_confirmation_email(self):
print(f"正在向客户 {self.customer_name} 发送订单 {self.order_id} 的确认邮件")
# 具体的邮件发送逻辑
创建对象也称为类的实例化。
#创建对象
my_order = Order("20231006", "李四", 10000)
#调用处理订单方法
my_order.process_payment()
#生成订单方法
my_order.generate_invoice()
#发送邮件
my_order.send_confirmation_email()
修改类属性的值,有以下几种方法
class classTest:
attribute = "old value"
classTest.attribute = "new value"
class classTest:
def __init__(self):
self.attribute = "old value"
obj = classTest()
obj.attribute = "new value "
3. 通过类的方法访问和修改属性
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"My name is {self.name} and I am {self.age} years old.")
def change_name(self, new_name):
self.name = new_name
def change_age(self, new_age):
self.age = new_age
# 创建一个Person对象
person = Person("李四", 18)
# 打印初始属性值
person.introduce()
# 使用类的方法修改属性值
person.change_name(“李小龙")
person.change_age(80)
# 打印修改后的属性值
person.introduce()
类继承是面向对象编程的重要特征之一,一个类可以继承另一个类的属性和方法,并且可以在其基础上进行扩展和修改。
我们把继承看作成是子类继承父类,如果一个子类继承了父类,那么该子类就拥有了父类的属性和方法。
比如人类,有2只手,2只腿,一双眼,会说话,会走路,学生类继承人类,那学生类的实例对象就拥有了这些属性和方法。
单继承
一个类只能继承自一个父类。在定义类时,可以在类名后面使用括号指定继承的父类
class ParentClass:
pass
class ChildClass(ParentClass):
pass
多继承
一个类可以同时继承多个父类。在定义类时,可以在括号中使用逗号分隔多个父类。
class ParentClass1:
pass
class ParentClass2:
pass
class ChildClass(ParentClass1, ParentClass2):
pass
可以使用多态来重写父类的方法。它允许子类对继承自父类的方法进行重写,并根据不同的子类对象执行不同的行为。
怎样实现多态?
要实现多态,首先需要创建一个父类,定义一个或多个方法。在子类中重写这些方法,以实现自定义的行为。子类可以根据需要修改方法的输入参数、输出结果或内部实现逻辑。
class Animal:
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
print("小狗是汪汪汪!")
class Cat(Animal):
def make_sound(self):
print("小猫是喵喵喵!")
class Cow(Animal):
def make_sound(self):
print("老黄牛是哞哞哞!")
# 创建对象并调用方法
animals = [Dog(), Cat(), Cow()]
for animal in animals:
animal.make_sound()
可以使用多态来重写父类的方法。它允许子类对继承自父类的方法进行重写,并根据不同的子类对象执行不同的行为。
怎样实现多态?
要实现多态,首先需要创建一个父类,定义一个或多个方法。在子类中重写这些方法,以实现自定义的行为。子类可以根据需要修改方法的输入参数、输出结果或内部实现逻辑。
注意:python 不直接支持方法重载,如果要实现重载需要借助默认参数来实现。
class Calculator:
def add(self, a, b=None, c=None):
if c is not None:
return a + b + c
elif b is not None:
return a + b
else:
return a
# 创建对象并调用方法
calculator = Calculator()
result1 = calculator.add(2)
print(result1) # 输出: 2
result2 = calculator.add(2, 3)
print(result2) # 输出: 5
result3 = calculator.add(2, 3, 4)
print(result3) # 输出: 9
Order.py 文件 包含Order类
class Order:
def __init__(self, order_id, customer_name, total_amount):
self.order_id = order_id
self.customer_name = customer_name
self.total_amount = total_amount
def process_payment(self):
print(f"正在处理订单 {self.order_id} 的支付,付款金额为 {self.total_amount}")
# 具体的支付逻辑
def generate_invoice(self):
print(f"正在生成订单 {self.order_id} 的发票")
# 具体的发票生成逻辑
def send_confirmation_email(self):
print(f"正在向客户 {self.customer_name} 发送订单 {self.order_id} 的确认邮件")
# 具体的邮件发送逻辑
Customer.py 文件
#import语句让Python 打开模块Order并导入中其中的Order类
from Order import Order
order=Order("T20231006002","李小龙",10000)
order.process_payment()
Customer.py 文件
#import语句让Python 打开模块Order并导入中其中的Order类, OnlineOrder类
from Order import Order ,OnlineOrder
order=Order("T20231006002","李小龙",10000)
order.process_payment()
ol=OnlineOrder("20231006003", "李四", 10000, "广州", "2023-10-06")
ol.process_payment()
Customer.py 文件
#import语句让Python 打开模块Order并导入所有模块
import Order
#import语句让Python 打开模块Order并导入所有模块,别为or
import Order as or
使用示例
cus=or.OnlineOrder("20231006003", "李四", 10000, "广州", "2023-10-06")