Python 创建一个 Person 类,包含属性 name 和 age(建议收藏)

快速解决

直接使用 class Person: 定义类,通过 __init__ 方法初始化 name 和 age 属性即可完成基础类创建,示例代码如下:

class Person:
    def __init__(self, name, age):
        self.name = name  # 初始化姓名属性
        self.age = age    # 初始化年龄属性

p = Person("Alice", 30)

常用方法

方法名 用法说明 使用频率 示例代码片段
__init__ 初始化类属性 ★★★★★ self.name = name
__str__ 定义字符串表示 ★★★★☆ return f"{self.name}"
@property 封装属性访问 ★★★★☆ @property装饰器
validate_age 添加年龄验证逻辑 ★★★★☆ if age < 0: raise...
set_age 修改年龄属性 ★★★☆☆ self._age = age
del Person 删除类定义 ★★☆☆☆ del Person

详细说明

初始化方法

class Person:
    def __init__(self, name, age):
        self.name = name  # 将传入的name参数赋值给实例属性name
        self.age = age    # 将传入的age参数赋值给实例属性age

person1 = Person("张三", 25)
print(person1.name)  # 输出实例的name属性
print(person1.age)   # 输出实例的age属性

字符串表示

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return f"{self.name}, {self.age}岁"  # 自定义打印格式

p = Person("李四", 30)
print(p)  # 输出:李四, 30岁

年龄验证

class Person:
    def __init__(self, name, age):
        self.name = name
        if age < 0:
            raise ValueError("年龄不能为负数")  # 基本验证逻辑
        self.age = age

try:
    p = Person("王五", -5)
except ValueError as e:
    print(e)  # 输出:年龄不能为负数

高级技巧

属性修改封装

class Person:
    def __init__(self, name, age):
        self.name = name
        self._age = age  # 使用下划线表示受保护属性
    
    @property
    def age(self):
        return self._age  # 通过property装饰器访问
    
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("无效年龄")  # 添加验证逻辑
        self._age = value

p = Person("赵六", 20)
p.age = 25  # 通过setter修改年龄
print(p.age)  # 输出25

类继承扩展

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

class Student(Person):
    def __init__(self, name, age, student_id):
        super().__init__(name, age)  # 调用父类初始化方法
        self.student_id = student_id  # 添加子类专属属性

s = Student("小明", 18, "S12345")
print(s.name, s.age, s.student_id)  # 输出继承的属性和新增属性

使用slots优化

class Person:
    __slots__ = ['name', 'age']  # 限制实例只能包含这两个属性
    def __init__(self, name, age):
        self.name = name
        self.age = age

p = Person("测试", 100)

实战应用

员工信息管理系统

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return f"{self.name} ({self.age})"

class Employee(Person):
    def __init__(self, name, age, salary):
        super().__init__(name, age)
        self.salary = salary  # 添加薪资属性
    
    def get_annual_income(self):
        return self.salary * 12  # 计算年薪

emp = Employee("李雷", 35, 10000)
print(f"员工{emp} 年薪:{emp.get_annual_income()}")  # 输出完整信息

用户注册验证

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    @property
    def is_adult(self):
        return self.age >= 18  # 验证是否成年

try:
    user = Person("小红", 16)
    if not user.is_adult:
        print("未满18岁,注册受限")
except Exception as e:
    print(e)

常见问题

Q1:如何处理用户输入负数年龄的情况?
A1:在 __init__ 方法中添加 if age < 0: raise ValueError() 验证逻辑,Python 会抛出异常提示。

Q2:如何访问 Person 类的 name 属性?
A2:通过实例直接访问 person.name,或使用 getattr(person, 'name') 方法获取。

Q3:需要扩展 Person 类功能怎么办?
A3:建议使用继承方式创建子类(如Student、Employee),通过 super().__init__() 保留原有功能。

Q4:能否添加其他属性?
A4:可以,在 __init__ 方法中增加参数即可,如 self.gender = gender,但要避免污染类结构。

总结

Python 创建一个 Person 类包含 name 和 age 属性,核心在于正确使用 __init__ 初始化方法,通过属性封装和继承扩展可以构建灵活的面向对象结构。