Python类对象核心机制:属性、方法与继承详解

巷口听风
巷口听风
发布时间:2026-10-14| 4人浏览过
原创

本文深入解析Python中类对象的核心特性。详细阐述类属性与实例属性的优先级关系,区分实例方法、类方法与静态方法的参数要求及调用方式。通过Toy与Cat类示例,展示装饰器@classmethod与@staticmethod的实际应用,并列出object祖先对象包含的基本方法,帮助开发者灵活运用类机制。

抽象特点

在Python中,万物皆对象。基于这一核心概念,类(class)具备以下显著特征:

类与实例的属性

在创建类对象时,可以选择定义类属性。当创建实例对象时,实例属性会通过自动执行类的__init__方法进行初始化。

实例对象会自动继承相应的类属性(如果存在),但在访问属性时,实例属性的优先级高于类属性。

实例方法、类方法与静态方法的参数差异

实例方法本质上是普通函数,但其独特之处在于必须传入self参数,这是它与普通函数的主要区别。

类方法和静态方法是通过装饰器实现的函数。其中,类方法需要传入cls参数,而静态方法既不需要self也不需要cls参数(尽管技术上允许传入其他参数)。

其中,self参数必须指向具体的实例对象,cls参数指向被定义的类对象(注:self与cls仅为约定俗成的命名,原则上可以使用其他名称)。

方法与函数的区别

方法是在对象语境下的函数。当实例调用实例方法时,即视为调用方法;而当类直接调用实例方法时,则等同于调用函数。

具体细节

类举例


class Toy(object): # 此处此类可理解为设计一个Toy的蓝图
  # 赋值定义类属性,记录所有玩具数量
  count = 0

  def __init__(self, name): # 用于实例初始化
    self.name = name
    # 类属性 +1
    Toy.count += 1

  @classmethod # 此装饰器表示是类方法,类方法无需创建实例对象即可调用,最为灵活
  def show_toy_count(cls):
    print('玩具对象的数量 %d' % cls.count, cls)

  @staticmethod # 此装饰器表示是静态方法,静态方法本质上是封装在类对象内的的函数,常用于测试
  def hi():
    print('Hello!')

  # 实例方法
  def beybey(self):
    print('Sad!', self)


# 创建实例对象
toy1 = Toy('乐高')
toy1.hand = 2
toy2 = Toy('泰迪熊')
toy3 = Toy('哥斯拉')
print(toy1.name, toy2.name, toy3.name)

# 点语法调用类方法与静态方法,如:类名.方法
Toy.show_toy_count()
Toy.hi()
# 实例对象调用类方法时,与类对象调用类方法无异,但实际上调用仍通过实例对象继承的类对象
toy1.show_toy_count()
print(toy1.hand)
# 实例对象调用静态方法时,与类对象调用静态方法无异,但实际上调用仍通过实例对象继承的类对象
toy2.hi()
# 实例对象调用实例方法,Python的解释器内部,当我们调用toy3.beybey()时,实际上Python解释成Toy.beybey(toy3)
toy3.beybey()
# Toy.beybey() # 错误语法,self必须指向实例对象,此处实例方法指向类对象而不是实例对象
Toy.beybey(toy3)
# 类与其实例的类型和内存地址
print(type(Toy), id(Toy), type(toy3), id(toy3))

输出结果

乐高 泰迪熊 哥斯拉 玩具对象的数量 3 <class '__main__.Toy'> Hello! 玩具对象的数量 3 <class '__main__.Toy'> 2 Hello! Sad! <__main__.Toy object at 0x000001FD9F794D60> Sad! <__main__.Toy object at 0x000001FD9F794D60> <class 'type'> 2188806599664 <class '__main__.Toy'> 2188813880672

类方法与静态方法举例


class Cat: # 或者class Cat()不写父对象形式定义类对象,会默认继承祖先object对象
  name = '小敏'

  @classmethod
  def www(cls):
    print('%s 干嘛!' % cls.name)
    # cls.call() # 类方法可以调用静态方法

  @staticmethod
  def call():
    print('喵喵~')
    Cat.name = '小敏臭弟弟'
    print(Cat.name)
    # Cat.www() # 静态方法可以调用类方法


Cat.www()
Cat.call()
# 没有定义实例方法可以创建实例对象继承并使用其中方法
cat1 = Cat()
cat1.www()
cat1.call()

输出结果

小敏 干嘛! 喵喵~ 小敏臭弟弟 小敏臭弟弟 干嘛! 喵喵~ 小敏臭弟弟

祖先对象中包含的基本方法


print(dir(object))

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

总结

类(class)是Python中最核心的对象。定义类时,通常需要完善类属性、实例方法、类方法和静态方法等部分。若将类和继承的类的实例比作函数中的主函数和子函数,那么类属性可视为全局变量,实例属性可视为局部变量;将类比作葫芦,实例方法则是方便我们照画瓢的同时,提供因地制宜的可能;类方法能够使我们更高效地使用类的功能,而静态方法往往能帮助我们了解类的功能。

类的各方法间并非彼此毫不相干,而是有着很强的共性。具体使用时应灵活运用,不应局限在抽象的定义之中。

到此这篇关于Python中类对象的文章就介绍到这了,更多相关Python类对象内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。