python的普通方法、类方法和静态方法

前言

本文主要讲述了python类中的三类常用方法,普通方法、类方法和静态方法。
普通方法会将实例传入方法当中(通常用self表示),类方法会将类传入方法当中(通常用cls表示),静态方法中传入与类无关的变量。下面将举例详细说明。
本文主要参考了https://youtu.be/rq8cL2XMM5M,强烈推荐一看这个系列的所有视频。

运行环境

import sys
sys.version

结果为

'3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)]'

普通方法

我们这里定义一个叫做学生的类,并在其中定义了一个普通方法total_score()用于获取某个实例的学生的总分。

class Student(object):

    num_of_stu = 0 #学生人数

    def __init__(self, name, age, math, Chinese):
        self.name = name #学生姓名
        self.age = age #学生年龄
        self.math = math #数学成绩
        self.Chinese = Chinese #语文成绩

        Student.num_of_stu += 1 #每实例化一个学生,人数加1,相当于静态变量

    def __del__(self):
        Student.num_of_stu -= 1 #每删除一个实例,人数减1

    #普通方法,用于计算学生的总分
    def total_score(self):
        return self.math + self.Chinese

然后我们生成几个实例试一下看

print (Student.num_of_stu)
stu1 = Student('Bob', 11, 51, 33)
print (stu1.total_score())
stu2 = Student('Peco', 12, 98, 79)
print (stu2.total_score())
print (Student.num_of_stu)
del stu1
print (Student.num_of_stu)

结果为

0
84
177
2
1

类方法

现在假设我们想用一个字符串来实现实现一个实例的实例化,那么我们可以加上一个类方法from_string

class Student(object):

    num_of_stu = 0 #学生人数

    def __init__(self, name, age, math, Chinese):
        self.name = name #学生姓名
        self.age = age #学生年龄
        self.math = math #数学成绩
        self.Chinese = Chinese #语文成绩

        Student.num_of_stu += 1 #每实例化一个学生,人数加1,相当于静态变量

    def __del__(self):
        Student.num_of_stu -= 1 #每删除一个实例,人数减1

    #普通方法,用于计算学生的总分
    def total_score(self):
        return self.math + self.Chinese

    #类方法,用于用字符串生成实例
    @classmethod
    def from_string(cls, stu_str):
        name, age, math, Chinese = stu_str.split('-')
        return cls(name, int(age), float(math), float(Chinese))

我们来试一下看

stu_str = "Bob-12-50-34"
stu1 = Student.from_string(stu_str)
print (stu1.name, stu1.total_score())

结果是

Bob 84.0

静态方法

现在又假设我们需要类中有一个方法可以帮我们看看是不是上课日,那么我们就需要静态方法了

class Student(object):

    num_of_stu = 0 #学生人数

    def __init__(self, name, age, math, Chinese):
        self.name = name #学生姓名
        self.age = age #学生年龄
        self.math = math #数学成绩
        self.Chinese = Chinese #语文成绩

        Student.num_of_stu += 1 #每实例化一个学生,人数加1,相当于静态变量

    def __del__(self):
        Student.num_of_stu -= 1 #每删除一个实例,人数减1

    #普通方法,用于计算学生的总分
    def total_score(self):
        return self.math + self.Chinese

    #类方法,用于用字符串生成实例
    @classmethod
    def from_string(cls, stu_str):
        name, age, math, Chinese = stu_str.split('-')
        return cls(name, int(age), float(math), float(Chinese))

    #静态方法,用于判断要不要上学
    @staticmethod
    def is_school_day(day):
        if day.weekday() == 5 or day.weekday() == 6:
            return False
        return True

我们来试下看

import datetime
my_date1 = datetime.date(2017, 9, 15)
my_date2 = datetime.date(2017, 9, 16)
print (Student.is_school_day(my_date1))
print (Student.is_school_day(my_date2))

结果是

True
False
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七元权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值