面对对象:
类:模板
对象:现实事物的抽象实例
# 定义一个类
class Dog:
# 初始化方法,当创建一个新的Dog对象时自动调用
def __init__(self, name, age):
self.name = name # 实例变量
self.age = age # 实例变量
# 实例方法,需要一个self参数来引用对象本身
def bark(self):
print(f"{self.name} says Woof!")
# 另一个实例方法
def sit(self):
print(f"{self.name} sits.")
# 类方法,使用@classmethod装饰器,第一个参数是cls,代表类本身
@classmethod
def breed(cls, breed_name):
print(f"This is a {breed_name} dog.")
# 静态方法,使用@staticmethod装饰器,不需要self或cls参数
@staticmethod
def about_dogs():
print("Dogs are loyal and friendly animals.")
# 创建一个Dog对象
my_dog = Dog("Buddy", 3)
# 调用对象的方法
my_dog.bark() # Buddy says Woof!
my_dog.sit() # Buddy sits.
# 访问对象的属性
print(my_dog.name) # Buddy
print(my_dog.age) # 3
# 调用类方法和静态方法
Dog.breed("Golden Retriever") # This is a Golden Retriever dog.
Dog.about_dogs() # Dogs are loyal and friendly animals.
- 封装:通过将数据(属性)和操作这些数据的方法(函数)放在同一个类中,从而隐藏对象的内部状态并且只允许通过对象方法进行访问,以此来达到封装数据和操作的目的。
- 继承:子类可以继承父类的属性和方法,使得子类能够复用父类的代码。Python支持多重继承。
class Bulldog(Dog): # Bulldog 继承自 Dog 类
def run(self, speed):
print(f"{self.name} runs at {speed} mph.")
bull_dog = Bulldog("Tom", 4)
bull_dog.run(10) # Tom runs at 10 mph.
bull_dog.bark() # Tom says Woof! # Bulldog 继承了 Dog 的 bark 方法
- 多态:指的是不同的对象对同一消息会做出不同的响应。在Python中,这通常是通过继承和重写父类方法来实现的。
class QuietDog(Dog):
def bark(self): # 重写父类的bark方法
print(f"{self.name} whispers woof.")
quiet_dog = QuietDog("Shhh", 2)
quiet_dog.bark() # Shhh whispers woof. # 表现出多态性,与Dog类的bark行为不同