社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

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

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


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(1, 2)


输出:


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


person_c = Person('Pang Hu')
person_c.calculate(1, 2)


输出:


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


大家应该学会了吧~

感谢阅读

推荐阅读:

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

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

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

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


重磅!Python交流群已成立



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



▲长按扫码

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