Python学习(十)--类方法、静态方法

2020-03-20  本文已影响0人  白面葫芦娃92

1.如何创建一个类方法

class Student():

    sum = 0

    def __init__(self, name1, age):
        self.name = name1
        self.age = age

    @classmethod
    def plus_sum(cls):
        pass

函数上方加上@classmethod,()里默认参数为cls,这样就成为了一个类方法

2.怎么使用类方法

上一篇Python学习(九)降到了用类变量来统计实例数量,当时计数语句放在了实例方法里,这样使用不是很合适,按道理不应该在实例方法里操作类变量。下面演示一下放在类方法里实现:

class Student():

    sum = 0

    def __init__(self, name1, age):
        self.name = name1
        self.age = age

    @classmethod
    def plus_sum(cls):
        cls.sum += 1
        print('当前班级学生总数为:' + str(cls.sum))

if __name__ == "__main__":
    student1 = Student('小明',18)
    Student.plus_sum()
    student2 = Student('小红',17)
    Student.plus_sum()
    student3 = Student('小鱼',19)
    Student.plus_sum()
    student4 = Student('小鹿',20)
    Student.plus_sum()
    student5 = Student('小凯',17)
    Student.plus_sum()

运行结果

当前班级学生总数为:1
当前班级学生总数为:2
当前班级学生总数为:3
当前班级学生总数为:4
当前班级学生总数为:5

对象可以使用类方法吗?是可以的,但是不推荐,逻辑上说不通

if __name__ == "__main__":
    student1 = Student('小明',18)
    student1.plus_sum()

运行结果

当前班级学生总数为:1

3.静态方法

class Student():
    sum = 0

    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def plus_sum(cls):
        cls.sum += 1
        print('当前班级学生总数为:' + str(cls.sum))

    @staticmethod
    def add(x, y):
        print('This is a static method')

if __name__ == "__main__":
    student1 = Student('小明',18)
    student1.add(1,2)
    Student.add(1,2)

函数上方加上@staticmethod,就成为了一个静态方法
类和对象都可以调用静态方法
运行结果:

This is a static method
This is a static method

静态方法内也可以调用类变量
思考一个问题,类方法和静态方法能不能访问实例变量?试验一下

class Student():

    sum = 0

    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def plus_sum(cls):
        cls.sum += 1
        # print('当前班级学生总数为:' + str(cls.sum))
        print('This is a class method')
        print(self.name)

    @staticmethod
    def add(x, y):
        print('This is a static method')
        print(self.name)

if __name__ == "__main__":
    student1 = Student('小明',18)
    student1.add(1,2)
    Student.add(1,2)
    student1.plus_sum()
    Student.plus_sum()

运行结果

This is a static method
Traceback (most recent call last):
  File "c1.py", line 82, in <module>
    student1.add(1,2)
  File "c1.py", line 78, in add
    print(self.name)
NameError: name 'self' is not defined

可见静态方法和类方法都不能访问实例变量
静态方法可以用类方法来代替,不推荐使用,因为它和普通函数几乎没什么区别,和类关联性不大

上一篇 下一篇

猜你喜欢

热点阅读