关于实例方法, 类方法和静态方法的思考

本文通过具体例子解释了Python中实例方法、类方法和静态方法的区别。介绍了静态方法与类实例无关的特点,实例方法如何绑定到对象并调用,以及类方法在特定场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Python类的学习中,对于实例方法, 类方法和静态方法的区别一直存有疑惑。 最近在学习java的过程中发现java对这方面的描述有助于对这三种方法的理解, 记录下以作备忘。参考 《java核心编程》

静态方法

静态方法是一种不能向对象实施操作的方法。

所谓不能向对象实施操作,意味着静态方法和普通函数没有什么区别, 和类对象或者类实例没有直接的绑定关系, 它只不过是恰巧存在于类中的一个方法而已。

import math
math.pow( x, y )

比如pow()方法, 它是math中的一个静态方法。在求x**y的过程中,直接针对的是x这个参数, 而不是math这个类或者类的对象。 就算脱离math这个类来描述这个操作, 也能使人明白而不产生歧义。

实例方法。

首先假设这样一个情景。我们现在需要为一个公司的开发保存所有雇员基本信息的系统, 这些信息包括姓名, 佣金以及招聘日期。 我们很容易就能写出这样的类。

class Employee(object):
    def __init__(self, name, salary, date):
       self.name = name
       self.salary = salary
       self.hire_day = date

    def get_name(self):
        return self.name

    def get_salary(self):
        return self.salary

    def get_hire_day(self):
        return self.hire_day

当我们实例化一个对象后, 就将get_name, get_salary, get_hire_day这些方法绑定到实例对象上。

a = Employee('mike', 3000, datetime.date(2017, 9, 1))

在调用get_name这些方法的时候, 需要在实例对象的基础上调用。在这个过程中, python隐式的把对象传递给了self参数, 而不需要手动传参。

Employee.get_name(a) # 获得属于类Employee的对象a的姓名
# 等价于
a.get_name()

这就是实例方法的调用。

类方法

还是基于Employee类来考虑。 在所有的员工中, 有一些员工的职位可能不仅仅是员工, 比如说经理。 经理相较于普通员工的薪资多了奖金这一项, 所以多了个bonus选项。 假定已经实现了manager类和get_bonus方法。

在这种情况下, 直接调用Employee.get_bonus()方法就不一定准确, 因为并不是所有的员工都是经理,自然并不是所有的员工都有get_bonus这个方法。 这种情况下就可以将其设置为类方法。即基于类而存在的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值