跳到主要内容

Python 面向对象编程基础

类的定义与使用

Python 中通过 class 关键字定义类。类是一种用于创建对象的模板。

class MyClass:
class_attribute = "我是类属性"

def method(self):
return "我是类方法"

my_object = MyClass()
print(my_object.class_attribute)
print(my_object.method())

构造方法

构造方法__init__在创建对象时自动调用,用于初始化对象的属性。

class Student:
def __init__(self, name, age):
self.name = name
self.age = age
self.scores = []

def add_score(self, score):
self.scores.append(score)

student = Student("sumingcheng", 20)
student.add_score(95)

继承机制

继承允许创建一个继承另一个类属性和方法的新类。

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def introduce(self):
return f"我叫{self.name},今年{self.age}岁"

class Teacher(Person):
def __init__(self, name, age, subject):
super().__init__(name, age)
self.subject = subject

def teach(self):
return f"我负责教授{self.subject}课程"

teacher = Teacher("sumingcheng", 35, "Python编程")
print(teacher.introduce())
print(teacher.teach())

封装特性

Python 使用命名约定实现属性和方法的访问控制。

class BankAccount:
def __init__(self):
self._balance = 0
self.__transaction_pin = "1234"

def deposit(self, amount):
if amount > 0:
self._balance += amount
return True
return False

account = BankAccount()
account.deposit(1000)

多态实现

多态允许不同类的对象对同一消息做出响应。

class Animal:
def make_sound(self):
pass

class Cat(Animal):
def make_sound(self):
return "喵喵"

class Dog(Animal):
def make_sound(self):
return "汪汪"

def animal_sound(animal):
print(animal.make_sound())

cat = Cat()
dog = Dog()
animal_sound(cat)
animal_sound(dog)

特殊方法

Python 提供特殊方法来自定义类的行为。

class Book:
def __init__(self, title, price):
self.title = title
self.price = price

def __str__(self):
return f"《{self.title}》 价格{self.price}元"

def __eq__(self, other):
if not isinstance(other, Book):
return False
return self.title == other.title

book = Book("Python编程", 99)
print(book)

属性装饰器

使用@property装饰器可以将方法转换为属性。

class Temperature:
def __init__(self, celsius):
self._celsius = celsius

@property
def fahrenheit(self):
return self._celsius * 9/5 + 32

@property
def celsius(self):
return self._celsius

@celsius.setter
def celsius(self, value):
self._celsius = value

temp = Temperature(25)
print(temp.fahrenheit)
temp.celsius = 30
print(temp.fahrenheit)