Py学习  »  Python

Python进阶系列连载(1)—— 类方法、实例方法和静态方法

Python爱好者社区 • 5 年前 • 696 次点击  

我们在进行面向对象学习时,会遇到各种方法,类方法、实例方法、静态方法。那这些到底是什么?怎么用?有啥区别?


Python类中的方法也可以具体可划分为类方法、实例方法和静态方法。

一般,我们在面向对象编程时,类中定义的都是实例方法。

下面这些代码定义的就是实例方法,一般需要传入self参数:


class Person:

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

    def greet(self):
        print('Hello, my name is {}.'.format(self.name))


如果要使用以上的实例方法,首先需要实例化一个对象,然后调用方法:


person_a = Person('Li Ming')
person_a.greet()


输出如下:


Python类方法中需要至少包含一个参数,一般默认写为cls,类方法的例子如下(在原来实例方法的基础上加入类方法):


class Person:

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

    def greet(self):
        print('Hello, my name is {}.'.format(self.name))

    @classmethod
    def info(cls):
        print('调用了类方法')


大家应该发现了,类方法需要使用修饰语句:@classmethod


类方法主要有两种方式调用:


第一种,使用类名直接调用类方法:


Person.info()


输出:


第二种,使用类实例调用类方法(不推荐):


person_b = Person('Xiao Hong')
person_b.info()


输出:


从以上可以看出,不创建实例和创建实例,都可以调用类方法。


接下来看看静态方法,静态方法不需要self、cls这样的参数,可以理解为静态方法只是普通的函数,不会用到类属性等内容。类静态方法中无法调用任何类和对象的属性和方法,静态方法与类的关系不大,加入了静态方法代码如下:


class Person:

    def __init__(self, name):
        self.name = name
    def greet(self):
        print('Hello, my name is {}.'.format(self.name))

    @classmethod
    def info(cls):
        print('调用了类方法')

    @staticmethod
    def calculate(a, b):
        print('调用静态方法计算两数之和')
        print('{}+{}={}'.format(a, b, a+b))


静态方法主要有两种方式调用:


第一种,使用类名直接调用静态方法:


Person.calculate(12)


输出:


第二种,使用类实例调用静态方法:


person_c = Person('Pang Hu')
person_c.calculate(12)


输出:


一般来说,实例方法大家必须掌握,其次,建议在面向对象编程中区分一下实例方法和静态方法。当用不到类属性时可以写静态方法,而不是实例方法。当你的某个方法与其它的方法没有任何关系的时候,就可以定义为静态方法和类方法。


大家应该学会了吧~

感谢阅读

推荐阅读:

1真实的上海IT圈:张江男vs漕河泾男

2:真实的北京IT圈:后厂村姑 vs 后厂村花?

3:为什么你的提问没人解答?

4:Python爱好者社区历史文章合集


重磅!Python交流已成立



公众号运营至今,离不开小伙伴们的支持。
为了给小伙伴们提供一个互相交流的技术平台,特地开通了Python交流群。
群里有不少技术大神,不时会分享一些技术要点,更有一些资源收藏爱好者不时分享一些优质的学习资料。(免费,不卖课!)
需要进群的朋友,可长按扫描下方二维码。



▲长按扫码

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/113747