到目前为止,大家在本教程中接触到的类成员函数均与实例绑定,即只能通过对象访问而不能通过类名访问。
Python中支持两种基于类名访问成员的函数:静态函数和类函数,它们的不同之处在于类函数有一个隐性参数cls可以用来获取类信息,而静态函数没有该参数。静态函数使用装饰器@staticmethod定义,类函数使用装饰器@classmethod定义。

实例:

# 定义一个类
class MyClass(object):
    message = "这是一个成员变量!"  # 成员变量message

    def __init__(self, name="Java", result="hello world!"):
        self.name = name  # 定义成员变量
        self.result = result  # 定义成员变量
        print("这是一个%s构造函数!我想让它输出:%s" % (name, result))

    def __del__(self):
        print("这是一个析构函数!")

    # 定义成员函数
    def show(self):
        print(self.message)
        print("我想让这个%s函数输出%s" % (self.name, self.result))

    @staticmethod  # 定义一个静态函数
    def printMessage():
        print("这是一个静态函数!")
        print(MyClass.message)

    @classmethod  # 定义类函数
    def createObject(cls, name, result):
        print("这是一个类函数:%s(%s, %s)" % (cls.__name__, name, result))
        return cls(name, result)


def main():
    MyClass.printMessage()
    inst01 = MyClass.createObject("Python", "hello Python")
    print(inst01.message)
    del inst01


if __name__ == '__main__':
    main()

以上代码输出结果为:

这是一个静态函数!
这是一个成员变量!
这是一个类函数:MyClass(Python, hello Python)
这是一个Python构造函数!我想让它输出:hello Python
这是一个成员变量!
这是一个析构函数!

以上代码中定义了静态函数printMessage(),在其中可以访问类成员变量MyClass.message,可以通过类名对它进行调用;代码中还定义了createObject(),类方法定义的第一个参数必须是隐性参数cls,在类方法createObject()中可以通过隐性参数cls替代类名本身,本例中的createObject建立并返回一个MyClass实例。

0条评论

相关推荐

Python函数

在编程中使用函数可以写出优雅的程序结构,模块化的结构使程序简单化,并提高了...

入门教程 2019-05-20 15:12:29

Python综述

Python是一种可以撰写跨平台应用程序的面向对象程序设计语言,它具有卓越...

入门教程 2019-05-21 09:33:16

Python异常

异常处理是编程语言中的一种机制,用于处理软件或信息系统中出现的异常状况(即...

入门教程 2019-05-20 17:20:26

Python基本数据类型

顾名思义,计算机就是用来处理各种各样的数据的机器,这些数据可能包括:数字,...

入门教程 2019-05-17 14:51:54

流程控制

流程控制语句用来实现对程序流程的选择、循环和返回等进行控制。Python中...

入门教程 2019-05-20 11:17:04