python中类类实例方法的区别_python类的实例方法\静态方法\类方法区别解析(附代码)...

先解析下这脚本干啥的:

就是有个类叫Data_test,然后实例化i = Data_test('2016','1','1')它能把结果按格式输出出来,打印年月日,但偏偏有的人比较贱,非要往里传一个"2016-1-1"这样的字符串,我们的类该怎么办呢。

class Data_test(object):

day=0

month=0

year=0

forclass = 250

def __init__(self,year=0,month=0,day=0):

self.day=day

self.month=month

self.year=year

@classmethod

def get_date_class(cls,data_as_string): # 可以传参,cls即为类自身

year,month,day=map(int,data_as_string.split('-'))

return cls(year,month,cls.forclass) # 因为类方法可以传参一个cls参数,所以可以调用类的相关信息,而静态方法只是一个独立的函数,恰巧放在了类里,他跟这个类有关系(逻辑上的关系,比如是为此类服务的,但无实质的交互),与类中的其他方法或属性无交互。这里边传递了一个类属性250

@staticmethod

def get_date_static(data_as_string): # 不能传递和类或实例相关的参数,如cls或self,但可以传递其他参数

year,month,day=map(int,data_as_string.split('-'))

return Data_test(year,month,day)

def out_date(self): # 最常见的实例方法

print "year :"

print self.year

print "month :"

print self.month

print "day :"

print self.day

# 类方法和静态方法调用方式一致,类名.方法名(参数),注意类名后边没有()

# 如果有括号相当于i=Data_test()实例化之后,再调用类方法i.get_date_class(),这样就多创建了一个对象i,虽然结果一致,但意义不同了。

# 另外再多说一句,如果i=Data_test(),之后直接去调用i()(对象名+括号),会自动调用类中的def __call__(self):方法,如果没定义就会报错,这里扯远了,和本文无关

c=Data_test.get_date_class("2015-5-5")

c.out_date()

s=Data_test.get_date_static("2016-6-6")

s.out_date()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值