Python - 静态函数(staticmethod), 类函数(classmethod), 成员函数 区别(完全解析)
Posted SpikeKing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python - 静态函数(staticmethod), 类函数(classmethod), 成员函数 区别(完全解析)相关的知识,希望对你有一定的参考价值。
静态函数(staticmethod), 类函数(classmethod), 成员函数的区别(完全解析)
版权所有, 禁止转载, 如有需要, 请站内联系.
本文地址: http://blog.csdn.net/caroline_wendy/article/details/23383995
定义:
静态函数(@staticmethod): 即静态方法,主要处理与这个类的逻辑关联, 如验证数据;
类函数(@classmethod):即类方法, 更关注于从类中调用方法, 而不是在实例中调用方法, 如构造重载;
成员函数: 实例的方法, 只能通过实例进行调用;
代码:
# -*- coding: utf-8 -*-
#eclipse pydev, python 3.3
#by C.L.Wang
class A(object):
_g = 1
def foo(self,x):
print('executing foo(%s,%s)'%(self,x))
@classmethod
def class_foo(cls,x):
print('executing class_foo(%s,%s)'%(cls,x))
@staticmethod
def static_foo(x):
print('executing static_foo(%s)'%x)
a = A()
a.foo(1)
a.class_foo(1)
A.class_foo(1)
a.static_foo(1)
A.static_foo('hi')
print(a.foo)
print(a.class_foo)
print(a.static_foo)
输出:
executing foo(<__main__.A object at 0x01E2E1B0>,1)
executing class_foo(<class '__main__.A'>,1)
executing class_foo(<class '__main__.A'>,1)
executing static_foo(1)
executing static_foo(hi)
<bound method A.foo of <__main__.A object at 0x01E2E1B0>>
<bound method type.class_foo of <class '__main__.A'>>
<function A.static_foo at 0x01E7E618>
具体应用:
比如日期的方法, 可以通过实例化(__init__)进行数据输出;
可以通过类方法(@classmethod)进行数据转换;
可以通过静态方法(@staticmethod)进行数据验证;代码:
# -*- coding: utf-8 -*-
#eclipse pydev, python 3.3
#by C.L.Wang
class Date(object):
day = 0
month = 0
year = 0
def __init__(self, day=0, month=0, year=0):
self.day = day
self.month = month
self.year = year
def display(self):
return "{0}*{1}*{2}".format(self.day, self.month, self.year)
@classmethod
def from_string(cls, date_as_string):
day, month, year = map(int, date_as_string.split('-'))
date1 = cls(day, month, year)
return date1
@staticmethod
def is_date_valid(date_as_string):
day, month, year = map(int, date_as_string.split('-'))
return day <= 31 and month <= 12 and year <= 3999
date1 = Date('12', '11', '2014')
date2 = Date.from_string('11-13-2014')
print(date1.display())
print(date2.display())
print(date2.is_date_valid('11-13-2014'))
print(Date.is_date_valid('11-13-2014'))
输出:
12*11*2014
11*13*2014
False
False
参考:
http://stackoverflow.com/questions/12179271/python-classmethod-and-staticmethod-for-beginner
http://stackoverflow.com/questions/136097/what-is-the-difference-between-staticmethod-and-classmethod-in-python
以上是关于Python - 静态函数(staticmethod), 类函数(classmethod), 成员函数 区别(完全解析)的主要内容,如果未能解决你的问题,请参考以下文章
Python - 静态函数(staticmethod), 类函数(classmethod), 成员函数 区别(完全解析)