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)