类和对象是面向对象编程中两个重要的概念,类是定义对象的模板,而对象则是类的一个实例。
可以把类比作是蓝图或者模具,它描述了一个对象具有的属性和方法。类定义了对象的结构和行为。在类中,可以定义对象的属性(可以是变量或者数据)和方法(可以是函数或者操作)。
对象是类的一个实例,它通过类实例化而来。可以将对象看作是类的具体实例,每个对象都有独立的属性值,但是共享类的方法和行为。通过创建对象,我们可以使用类中定义的属性和方法。
举个例子来说明,可以将类比作是图纸,而对象则是根据图纸制造出来的一座房子。图纸定义了房子的结构和功能(例如,有几层,有几间卧室等),而每座实际的房子则有自己独立的属性(例如,颜色,面积等)。
通过定义类和创建对象,可以更好地组织和管理代码,使代码更易于复用和维护。同时,类和对象的使用也可以实现面向对象编程的核心概念,如封装、继承和多态。
[root@learning ~]# python3.11 !$
python3.11 class.py
Buddy makes woof!
[root@learning ~]# cat class.py
class Animal: #定义一个动物的类
def __init__(self, name, species):
self.name = name #有名字和种类两个属性
self.species = species
def make_sound(self, sound): 有一个方法,是make_sound
print(f"{self.name} makes {sound}!")
# Create an instance of the Animal class
dog = Animal("Buddy", "Dog") #实例化一个类,并定义了名字和种类
# Call the make_sound method
dog.make_sound("woof") #使用类的方法
[root@learning ~]# python3.11 class.py
Buddy makes woof! #运行结果
[root@learning ~]# cat classf.py #定义了一个计算器的类
class Calculator:
def add(self, num1, num2): #加功能,与数据格式的定义
return num1 + num2
def subtract(self, num1, num2): #减功能
return num1 - num2
def multiply(self, num1, num2): #乘功能
return num1 * num2
def divide(self, num1, num2): #除法功能
if num2 == 0:
return "Error: Cannot divide by zero"
else:
return num1 / num2
# Create an instance of the Calculator class
calc = Calculator() #实例化
# Perform some calculations using the functions of the Calculator class
print("Addition:", calc.add(5, 3)) #使用计算器功能
print("Subtraction:", calc.subtract(10, 4))
print("Multiplication:", calc.multiply(6, 2))
print("Division:", calc.divide(8, 2))
[root@learning ~]# python3.11 classf.py #运行结果
Addition: 8
Subtraction: 6
Multiplication: 12
Division: 4.0
[root@learning ~]# cat classs.py #类的继承与变化的例子
class Animal: #定义动物类
def __init__(self, name): #名字属性
self.name = name
def sound(self): #发声方法
print("Some generic sound")
class Dog(Animal): #继承 动物类的 Dog类
def __init__(self, name): #继承属性
super().__init__(name)
def sound(self): #发声方法的重新定义
print("Woof")
class Cat(Animal): #Cat 类
def __init__(self, name):
super().__init__(name)
def sound(self):
print("Meow")
# Create instances of the classes
dog = Dog("Buddy") #实例化
cat = Cat("Whiskers")
# Call the sound method of the instances
dog.sound() # Output: Woof
cat.sound() # Output: Meow
[root@learning ~]# python3.11 classs.py #运行结果
Woof
Meow
类的封装
信息隐藏: 封装可以隐藏类的实现细节,只向外部暴露必要的接口,减少了对外部的依赖性,提高了模块间的解耦,增加了代码 的可维护性和可重用性。
保护数据: 封装可以通过将数据成员设置为私有(private)来保护数据,防止外部直接访问和修改数据,只能通过类提供的接口进行操作,从而有效地控制数据的合法性和一致性。
增强安全性: 封装可以对类的使用进行限制,通过将类的部分成员设置为私有,只暴露有限的接口,从而防止误操作和非法访问 ,提高了程序的安全性。
简化调用: 封装可以将复杂的操作封装在类的内部,对外部提供简单易用的接口,减少了外部代码的复杂性,提高了代码的可读 性和可维护性。
实现抽象数据类型: 封装可以将数据和操作封装成一个完整的抽象数据类型,只暴露抽象的接口,利于代码的组织和管理,提高 了代码的可理解性和可扩展性。
因此,类的封装不仅提供修改的功能,还能提供信息隐藏、数据保护、安全性增强、调用简化和抽象数据类型等多种好处,有助于提高软件的质量和效率。
cat classp.py
class Person: #写义 Person类
def __init__(self, name): #名字 属性
self.name = name
def change_name(self, new_name): #改名的 方法
self.name = new_name
# Create a new instance of the Person class
p = Person("John") #实例化
# Print the initial name
print("Initial name:", p.name) #查看属性
# Change the name using the function
p.change_name("Jack") #使用改名的方法
# Print the updated name
print("Updated name:", p.name)
[root@learning ~]# python3.11 !$ #运行结果
python3.11 classp.py
Initial name: John
Updated name: Jack
[root@learning ~]# cat car.py #一个关于车的类的例子
class Vehicle: #定义车 类
def __init__(self, name, max_speed): #有两个属性
self.name = name
self.max_speed = max_speed
def description(self): #有一个方法,描述自身
print(f"The {self.name} has a maximum speed of {self.max_speed} mph.")
class Car(Vehicle): #小汽车的类
def __init__(self, name, max_speed, mileage): #添加了一个属性
super().__init__(name, max_speed)
self.mileage = mileage
def description(self): #描述也添加了 print语句
super().description()
print(f"It also has a mileage of {self.mileage} mpg.")
# Creating an instance of the Car class
toyota_camry = Car("Toyota Camry", 180, 27) #实例化小汽车
# Calling the description method
toyota_camry.description() #使用小汽车的 描述功能
[root@learning ~]# python3.11 car.py #运行结果
The Toyota Camry has a maximum speed of 180 mph.
It also has a mileage of 27 mpg.