Python面向对象编程(类的组成)

一.类的组成

1.类的定义

class Person:
    """定义一个表示人的类"""
    pass  # 占位符,表示类体为空(后续会填充具体内容)
  • class Person::定义一个名为 Person 的类。
  • pass:暂时不写任何逻辑,留待后续补充。

2.类的属性

(1)类属性(Class Attributes)

class Person:
    species = "Homo sapiens"  # 类属性:所有实例共享
    total_people = 0          # 统计创建了多少个实例
  • 特点
    • 在类内部直接定义,不在方法中。
    • 所有实例共享同一个值。
    • 可以通过 类名.属性名 或 实例.属性名 访问。
  • 用途:存储与类相关的全局信息(如物种、计数器)。

(2)实例属性(Instance Attributes)

def __init__(self, name, age):
    self.name = name  # 实例属性:每个实例独立拥有
    self.age = age
  • 特点
    • 在 __init__ 方法中通过 self.属性名 定义。
    • 每个实例有独立的值。
    • 只能通过 实例.属性名 访问。
  • 用途:存储单个对象的状态(如姓名、年龄)。

3. 类的方法

(1) 实例方法(Instance Methods)
def greet(self):
    return f"Hello, my name is {self.name} and I am {self.age} years old."
  • 特点
    • 第一个参数是 self,代表调用该方法的实例。
    • 必须通过实例调用(如 person1.greet())。
    • 可以访问实例属性和其他实例方法。
  • 用途:操作实例自身的数据。
(2) 类方法(Class Methods)
@classmethod
def get_species(cls):
    return cls.species
  • 特点
    • 使用 @classmethod 装饰器声明。
    • 第一个参数是 cls,代表类本身。
    • 可通过类名或实例调用(如 Person.get_species())。
    • 用于操作类级别的数据(如修改类属性)。
  • 用途:提供与类相关的功能(如获取默认物种)。
(3) 静态方法(Static Methods)
@staticmethod
def is_adult(age):
    return age >= 18
  • 特点
    • 使用 @staticmethod 装饰器声明。
    • 没有 self 或 cls 参数。
    • 完全独立于类和实例,仅作为逻辑封装。
    • 可通过类名或实例调用(如 Person.is_adult(25))。
  • 用途:实现与类相关但不需要访问类/实例数据的功能(如工具函数)。

4. 特殊方法(魔术方法)

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

def __del__(self):
    print(f"{self.name} has been deleted.")
  • __str__:控制 print() 或 str() 的输出格式。
  • __del__:对象被销毁时自动调用(如引用计数归零)。
  • 其他常见魔术方法__len____eq____init__ 等。

5.完整代码

class Person:
    # 类属性:所有实例共享
    species = "Homo sapiens"
    total_people = 0

    # 构造函数:初始化实例属性
    def __init__(self, name, age):
        self.name = name
        self.age = age
        Person.total_people += 1  # 每创建一个实例,计数器+1

    # 实例方法:操作实例数据
    def greet(self):
        return f"Hello, my name is {self.name} and I am {self.age} years old."

    # 类方法:操作类级别的数据
    @classmethod
    def get_species(cls):
        return cls.species

    # 静态方法:独立逻辑封装
    @staticmethod
    def is_adult(age):
        return age >= 18

    # 魔术方法:自定义字符串表示
    def __str__(self):
        return f"Person(name={self.name}, age={self.age})"

    # 析构函数:清理资源
    def __del__(self):
        print(f"{self.name} has been deleted.")
        Person.total_people -= 1  # 销毁实例时计数器-1

# 测试代码
p1 = Person("Alice", 30)
p2 = Person("Bob", 17)

print(p1.greet())                # 实例方法调用
print(Person.get_species())      # 类方法调用
print(Person.is_adult(p2.age))   # 静态方法调用
print(p1)                        # __str__ 生效
print(Person.total_people)       # 类属性访问

del p1                          # 触发 __del__
print(Person.total_people)       # 计数器减少

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值