首页 > 编程语言 > 详细

Python类的静态方法、类方法、实例方法的区别

时间:2021-04-12 16:50:57      阅读:27      评论:0      收藏:0      [点我收藏+]

类的方法就是类中定义的函数方法。类中的函数有三种情况:静态方法、类方法、实例方法。通过分类,分出了各个方法作用的不同范围。

例子说明

class Foo(object):
    """类三种方法语法形式"""

    def instance_method(self):
        print("是类{}的实例方法,只能被实例对象调用".format(Foo))

    @staticmethod
    def static_method():
        print("是静态方法")

    @classmethod
    def class_method(cls):
        print("是类方法")

用类的实例可以访问类中的所有三种方法,实例方法最大的特点就是,它最少也要包含一个 self 参数,用于绑定调用此方法的实例对象(Python 会自动完成绑定)。实例方法通常会用类的实例对象直接调用:

foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
输出:
是类<class ‘__main__.Foo‘>的实例方法,只能被实例对象调用
是静态方法
是类方法

用类名可以访问静态方法

Foo.static_method()
输出
是静态方法
#如果用类名去访问实例方法
Foo.instance_method()
输出:
TypeError: instance_method() missing 1 required positional argument: ‘self‘
#不能通过类名直接去访问实例方法。但是如果非要访问,可以这么做:
#foo = Foo()
#Foo.instance_method(fool) 这么做效果和foo.instance_method()一样,但是显得没有必要
#如果用类名去访问类方法,可以正常访问。
Foo.class_method()
输出:
是类方法

使用场景区别

类方法

由于Python类中只能有一个初始化方法 def __init__(self),不能按照不同的情况初始化类。

class Book(object):

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

    @classmethod
    def create(cls, title):
        book = cls(title=title)
        return book

book1 = Book("python")
book2 = Book.create("python and django")
print(book1.title)
print(book2.title)

类方法中通常将参数命名为 cls,Python 会自动将类本身绑定给 cls 参数(注意,绑定的不是类对象)。也就是说,我们在调用类方法时,无需显式为 cls 参数传参。

和实例方法最大的不同在于,类方法需要使用@classmethod修饰符进行修饰,如果没有 @classmethod,则 Python 解释器会将 类方法认定为实例方法,而不是类方法。

虽然,实例化的对象也能调用类方法,但是不这么做。

使用说明:

  • 静态方法和类方法应由未实例化的类调用
  • 类属性、实例方法和带property属性的方法由已经实例化的对象调用。

Python类的静态方法、类方法、实例方法的区别

原文:https://www.cnblogs.com/lanhuakai/p/14647581.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!