2024-01-21 13:48:35
在Python中,定义类主要通过class关键字结合驼峰命名法实现链盯,同时支持继承、多态、封装等面向对象特性。以下是具体方法和最佳实践:
1. 基础类定义使用class关键字后跟类名(驼峰命名法)和冒号,类体中定义属性和方法:
class MyClass: def __init__(self, attribute): # 初始化方法 self.attribute = attribute # 实例属性 def my_method(self): # 实例方法 return f"My attribute is {self.attribute}"__init__是构造函数,用于初始化实例变量。
self参数代表当前实例,用于访问实例属性和方法。
通过继承实现代码复用,子类可重写父类方法以实现多态:
class Animal: def __init__(self, name): self.name = name def speak(self): pass # 抽象方法,子类需实现class Dog(Animal): def speak(self): return f"{self.name} says Woof!"class Cat(Animal): def speak(self): return f"{self.name} says Meow!"# 多态应用:通过父类引用子类实例def animal_speak(animal): return animal.speak()dog = Dog("Buddy")cat = Cat("Kitty")print(animal_speak(dog)) # 输出: Buddy says Woof!print(animal_speak(cat)) # 输出: Kitty says Meow!子类通过继承父类(如Dog(Animal))获取属性和方法。
多态允许同一方法在不同子类中表现不同袜汪行为。
通过属性(@property)实现数据封装和验证:
class Person: def __init__(self, name, age): self._name = name # 约定用下划线表示受保护属性 self._age = age @property def name(self): return self._name @name.setter def name(self, value): if not isinstance(value, str): raise ValueError("Name must be a string") self._name = value @property def age(self): return self._age @age.setter def age(self, value): if not isinstance(value, int) or value < 0: raise ValueError("Age must be a non-negative integer") self._age = value使用@property装饰器定义 getter 方法,@x.setter定义 setter 方法。
在 setter 中添加验证逻辑,确保数据有效性。
类方法:用于创建类实例的替代构造函数。
静态方法:工具方法,无需访问实例或类状态。
类名:驼峰命名法(如MyClass)。
方法/变量:小写字母加下划线(如my_method)。
通过遵循上述规范,可定义出结构清晰、可维护性强的Python类,充分发挥面向对象编程的优势。