Python类与方法的完整指南:从基础到高级特性

栗子
栗子
发布时间:2026-10-15| 5人浏览过
原创

本文深入解析Python面向对象编程核心概念,涵盖类的定义与实例化、构造方法__init__()的使用、self参数的作用、单继承与多继承机制、方法重写及super()函数的应用,以及私有属性和私有方法的实现原理。通过具体代码示例,帮助开发者掌握Python类与方法的实际用法。

由于对面向对象编程中类和方法的核心思想理解不够透彻,特此整理并分享Python中关于class(类)的相关知识,供学习参考。

类与方法的基本概念及示例

  • 类(Class):用于描述具有相同属性和方法对象的集合,它定义了该集合中每个对象共有的属性和行为。对象则是类的具体实例。
  • 方法:定义在类内部的函数,用于实现类的具体行为。
  • 类的构造方法__init__():每个类都包含一个名为__init__()的特殊方法(即构造方法),在创建类的实例时会自动调用,用于初始化对象状态。
  • 实例变量:在类声明中通过变量表示的属性,称为实例变量。这类变量通常以self作为前缀进行修饰,用于存储对象特有的数据。
  • 实例化:指创建一个类的具体对象的过程,即生成类的实例。
  • 继承:允许一个派生类(derived class)继承基类(base class)的字段和方法。继承也支持将派生类的对象视为基类对象使用。例如,若设计一个Dog类型对象派生自Animal类,这模拟了“是一个(is-a)”的关系(如Dog是Animal的一种)。

1. Python类的定义:class

Python中的class(类)类似于一个由多个函数组成的家族。假设在这个Myclass家族中有一个人叫f,如果f具有打印天气的功能,那么当我们需要f打印今天的天气时,必须通过其全名MyClass.f来调用,即在调用时需带上家族名称(类名)+ 个人名称(方法名)。

  • 属性:类内部定义的变量。若将变量比作物品,不同的属性即代表家族中不同的物品。
  • 方法:类内部定义的函数。若将函数比作人,不同的方法即代表家族中不同的个体。

MyClass实例化示例:

#Myclass家族,但是这个家族只有一个人f
class MyClass:   
  """一个简单的类实例"""    
  i = 12345    
  def f(self):        
    return 'hello world'
# 实例化类
x = MyClass() 
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i) #家族x + 物品名i
print("MyClass 类的方法 f 输出为:", x.f()) #家族x + 人名f

输出结果:

2. 类的构造方法__init__()

若将__init__()比作人,它是家族与外界的联系纽带。当外界想要调用家族内部成员时,必须先通知__init__()。因此,只要家族成员被调用,__init__()便会优先执行,再由其通知被调用的具体成员执行相应操作。

__init__()实例演示:

class Complex:
    def __init__(self, realpart, imagpart): #必须要有一个self参数,
        self.r = realpart
        self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i)   # 输出结果:3.0 -4.5

输出结果:

3. 类中方法的参数self

在类内部使用def关键字定义方法时,与一般函数不同,类方法必须包含参数self,且作为第一个参数。self代表类的实例本身。

  • self:类的方法与普通函数的主要区别在于必须有一个额外的第一个参数,按照惯例命名为self。
  • 类的实例化:将类应用于具体场景。例如,若类中有一个函数f具备打印某一时刻天气的能力,当我们需要f打印今天12点的天气时,这一动作即为类的实例化,使类中函数的能力转化为实际执行的操作。

实例化示例:

#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    #定义构造方法
    def __init__(self,n,a):
        self.name = n
        self.age = a
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))

# 实例化类
p = people('Python',10,30)
p.speak()

输出结果:

4. 继承机制

假设有两个家族,家族A开始衰落,而新兴的家族B希望继承家族A的物资和佣人,可通过以下方式实现继承。在此场景中,家族A为父类,家族B为子类。用法上,B家族可任意使用A家族的物资和佣人。

class [子类]([父类]):

  • BaseClassName(示例中的基类名)必须与派生类定义在同一作用域内。除了类名,还可以使用表达式;当基类定义在另一个模块中时,这一点尤为有用。
  • Python支持多继承,即一个子类可以继承多个父类。继承方式与单继承相同,具体语法如下:

class [子类]([父类]1, [父类]2, [父类]3):

继承示例:

#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))

#单继承示例
class student(people): #student为子类,people为父类
    grade = ''
    def __init__(self,n,a,w,g):
        #调用父类的构函
        people.__init__(self,n,a,w)
        self.grade = g
    #覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))

s = student('ken',10,60,3)
s.speak()

运行结果:

5. 方法重写

若父类方法的功能无法满足需求,可在子类中重写父类方法。例如,若B家族继承了A家族,但B家族中某佣人只会扫地,A家族通过“洗脑”使其掌握洗碗和擦桌子技能,则该佣人仅具备新技能。

  • super()函数用于调用父类(超类)的方法。

方法重写示例:

class Parent:        # 定义父类
   def myMethod(self):
      print('调用父类方法')

class Child(Parent): # 定义子类
   def myMethod(self):
      print('调用子类方法')

c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法

输出结果:

类的特殊属性与方法

类的私有属性

_private_attrs:以两个下划线开头,声明该属性为私有,不能在类外部直接使用或直接访问。在类内部方法中使用时,需通过self.__private_attrs访问。

私有属性示例:

class JustCounter:
    __secretCount = 0  # 私有变量
    publicCount = 0    # 公开变量

    def count(self):
        self.__secretCount += 1
        self.publicCount += 1
        print(self.__secretCount)

counter = JustCounter()
counter.count()
counter.count()
print(counter.publicCount)
print(counter.__secretCount)  # 报错,实例不能访问私有变量

输出结果:

类的私有方法

  • __private_method:以两个下划线开头,声明该方法为私有方法,只能在类内部调用,不能在类外部直接调用。在类内部使用时,需通过self.__private_methods访问。

私有方法示例:

class Site:
    def __init__(self, name, url):
        self.name = name       # public
        self.__url = url   # private

    def who(self):
        print('name  : ', self.name)
        print('url : ', self.__url)

    def __foo(self):          # 私有方法
        print('这是私有方法')

    def foo(self):            # 公共方法
        print('这是公共方法')
        self.__foo()

x = Site('Python', 'www.irvingao.com')
x.who()        # 正常输出
x.foo()        # 正常输出
x.__foo()      # 报错

输出结果:

参考学习资料:

Python3 面向对象编程文档

总结

至此,关于Python中class类与方法的文章介绍完毕。如需了解更多Python class类与方法相关内容,请搜索本站过往文章或继续浏览后续相关文章。希望大家今后多多支持本站!

相关标签:

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

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 算法库。