python类的三种方法

python类有三种方法。
1.一般方法,即不加任何修饰的,直接用def定义的方法。如:

In [14]: class A:
    ...:     def a(self):
    ...:         print('一般方法')
    ...:

In [15]: class_A = A()

In [16]: class_A.a()
一般方法

2.staticmethod方法
经过staticmethod修饰过的类方法无需实例化即可被调用,而且该类方法不再需要self作为第一参数。

In [107]: class A:
     ...:     @staticmethod
     ...:     def foo(x):
     ...:         print(x)
     ...:

In [108]: A.foo(1)
1

这样做的好处是,以后重构类的时候不需要修改init函数,只要额外添加需要处理的函数,然后使用@staticmethod修饰即可。

  1. classmethod 修饰的方法。类方法经 classmethod 修饰后无需实例化即可被调用,而且该类方法的第一参数不再是self,而是cls,表示类本身。
In [20]: class B:
    ...:     a = 1
    ...:     def __init__(self):
    ...:         print('init class A')
    ...:     @classmethod
    ...:     def func1(cls):
    ...:         print('classmehod func1')
    ...:         print(cls.a)
    ...:

In [21]: B.func1()
classmehod func1
1

下面这个例子可以体现它的用途:

class Data_test2(object):
day=0
month=0
year=0
def __init__(self,year=0,month=0,day=0):
self.day=day
self.month=month
self.year=year

@classmethod
def get_date(cls,
string_date):
#这里第一个参数是cls, 表示调用当前的类名
year,month,day=map(int,string_date.split('-'))
date1=cls(year,month,day)
#返回的是一个初始化后的类
return date1

def out_date(self):
print("year :")
print(self.year)
print("month :")
print(self.month)
print("day :")
print(self.day)

调用:

r=Data_test2.get_date("2016-8-6")
r.out_date()
输出:

year :
2016
month :
8
day :
1

这样子等于先调用get_date()对字符串进行处理,然后才使用Data_test的构造函数初始化。

这种用法爬虫框架scrapy有经常用,scrapy提供一个settings.py文件,开发者可以根据自己的实际情况设置一些值。需要获取这些值的类都有一个被classmethod方法修饰的from_settings()函数。这样做的好处是,可以动态实例化一个类,增加代码的灵活性。
下面是伪码,仅供参考

#settings.py文件

DOWNLOAD_DELAY = 1  # 间隔时间


#某个文件
import settings

class A(object):
    def __init__(self,delay):
        self.delay = delay

    @classmethod
    def from_settings(cls,settings):
        return cls(settings.DOWNLOAD_DELAY)
  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值