博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python2.7 学习体会 @classmethod @staticmethod @property 之间的关系
阅读量:5084 次
发布时间:2019-06-13

本文共 1971 字,大约阅读时间需要 6 分钟。

先来一个实例场景,然后测试,比较,不懂的话到网上找资料:

#!/usr/bin/env python

#!/usr/bin/env python

class Date(object):

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

     @staticmethod
     def statictime(self):
         return "{year}-{month}-{day}".format(
             year = self.year,
             month = self.month,
             day = self.day
         )

    @property

     def time(self):
         return "{year}-{month}-{day}".format(
             year = self.year,
             month = self.month,
             day = self.day
         )
     @classmethod
     def from_string(cls,string):
         year,month,day = map(str,string.split('-'))
         date = cls(year,month,day)
         return date

    def showtime(self):

         return "{M}/{D}/{Y}".format(
             Y = self.year,
             M = self.month,
             D = self.day
         )
print '-'*20
date = Date("2016","11","09")
print 'date @property ',date.time
print 'date @normal ',date.showtime()
print 'date @staticmethod ',date.statictime(date)

print '-'*20

date_string = '2017-05-27'
year,month,day = map(str,date_string.split('-'))
date2 = Date(year,month,day)
print 'date2 @property ',date2.time
print 'date2 @noraml ',date2.showtime()
print 'date2 @staticmethod ',date2.statictime(date2)

print '-'*20

date3 = Date.from_string(date_string)                     
print 'date3 @property ',date3.time
print 'date3 @normal ',date3.showtime()
print 'date3 @staticmethod ',date3.statictime(date3)

运行结果:

--------------------
date @property  2016-11-09
date @normal  11/09/2016
date @staticmethod  2016-11-09
--------------------
date2 @property  2017-05-27
date2 @noraml  05/27/2017
date2 @staticmethod  2017-05-27
--------------------
date3 @property  2017-05-27
date3 @normal  05/27/2017
date3 @staticmethod  2017-05-27

初步测试结果:

1、@property  装饰器后面的函数,在实例调用中不能加(),不然会出现错误:TypeError: 'str' object is not callable

2、正常的方法,在实例调用中如果不加() ,就是不运行函数,而只是返回函数(方法)的地址:>

3、@staticmethod 装饰器后面的函数,在实例调用中必须加对像参数,不然会提示:TypeError: statictime() takes exactly 1 argument (0 given)

4、@classmethod 我的初步理解:是对类,进行重新的定义初始化。

========================================================

实例原型链接: (非常推荐大家去看看)

明天继续….

转载于:https://www.cnblogs.com/killad/p/6914806.html

你可能感兴趣的文章
pku 3661 Running DP
查看>>
BZOJ4923 K小值查询(splay)
查看>>
被sleep开了个小玩笑
查看>>
centos安装memcache与telnet
查看>>
安卓ROOT后禁用/隐藏导航栏/虚拟按键
查看>>
day13 字典生成式
查看>>
将二维数组转为一维数组的2种方法
查看>>
使用1.7 Files,实现编码探测
查看>>
(二)快速搭建 ASP.net core Web 应用
查看>>
TopCoder-SRM635-DIV1-250pt-SimilarRatingGraph-枚举+边界处理
查看>>
轻松搞懂Python的属性和方法
查看>>
JVM内存状况查看方法和分析工具
查看>>
关于判断物体是否在视野范围内
查看>>
Android应用开发中模拟按HOME键效果
查看>>
Python:ModuleNotFoundError: No module named 'windows'
查看>>
Linq查询
查看>>
json_encode charset
查看>>
jquery api
查看>>
C#compiler
查看>>
machine%20learning
查看>>