Python2.7 学习体会 @classmethod @staticmethod @property 之间的关系

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

#!/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 我的初步理解:是对类,进行重新的定义初始化。

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

实例原型链接:http://mp.weixin.qq.com/s/6NJAoFI-DbsNQdA3M1SIMw (非常推荐大家去看看)

明天继续….

时间: 2024-10-29 03:40:41

Python2.7 学习体会 @classmethod @staticmethod @property 之间的关系的相关文章

Python2.7 学习体会 @classmethod @staticmethod @property 之间的关系二

先到百度找了一下资料,引用个重点,对比昨天实例来理解: 引用:http://blog.csdn.net/carolzhang8406/article/details/6856817 在Python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法. 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例. 普通对象方法至少需要一个self参数,代表

python 装饰器语法糖(@classmethod @staticmethod @property @name.)原理剖析和运用场景

引用:http://blog.csdn.net/slvher/article/details/42497781 这篇文章系统的介绍这几者之间的关系和区别.有兴趣的朋友可以到上面的链接查看原文,这里我把原文拷贝如下(如有侵权,通知马上删除) ==================================================================== 在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classme

峰Spring4学习(5)bean之间的关系和bean的作用范围

一.bean之间的关系: 1)继承: People.java实体类: package com.cy.entity; public class People { private int id; private String name; private int age; private String className; public int getId() { return id; } public void setId(int id) { this.id = id; } public Strin

linux学习笔记----权限与命令之间的关系(极重要)

一.权限与命令之间的关系 二.文件与目录的默认权限与隐藏权限 1)umask为默认的权限(通过umask -S)查看你的系统的默认权限. umask的分数是指该默认值需要减掉的权限,比如说umask=022,则该权限为u=7-0=7,g=7-2=5,o=7-2=5;即该权限为755 2)文件的隐藏属性chattr,lsattr(显示文件隐藏属性) chattr [=-=][ASacdistu]最常用的是a和i,其中a代表这个文件只能增加数据,而不能删除数据或修改数据.只有root有这个权限.i代

oc学习之封装与类之间的关系

1. 面向对象的特征-封装? 封装: 现实生活中的封装: 将很多的小东西 塞在1个大口袋里面. 好处: a. 对外部屏蔽. b. 方便管理. 代码的封装: 函数/方法 就是1种封装的体现: 将一段代码塞在函数/方法中. 好处: 屏蔽了内部的实现. 便于管理. 类是一种更高级别的封装: 1个类中封装数据的状态和行为. 将数据的状态和行为封装在了1个类中. 类中有很多复杂的实现. 对于外部而言无需关心. 只需要知道这个类是干啥的? 怎么用? 把哪些复杂的东西. 方法,属性.封装成1个类的整体. 2.

property装饰器函数 @classmethod @staticmethod isinstance和issubclass

property函数   让方法伪装成属性   还有一系列的装饰器函数 1 class Goods: 2 __discount = 0.8 3 def __init__(self,price): 4 self.__price = price 5 self.name = 'apple' 6 7 @property #伪装成属性 8 def price(self): 9 return self.__price * Goods.__discount 10 11 @price.setter #修改折扣

mybatis学习笔记(1):搭建开发环境,以及mybatis各个配置文件之间的关系

一.环境 1.myeclipse10.7 2.数据库:mysql 3.jdk:jdk1.8 4.jar包:mybatis3.2.0.jar mysql-connector-java-5.1.22-bin.jar    log4j-1.2.16.jar 二.步骤 1.新建一个web工程:mybatis001. 将所需Jar包都拷贝到工程的WebRoot\WEB-INF\lib目录下(或者建一个java工程) 2.mysql新建一个数据库表:mybatis001 3.在表中增加2条信息 4.新建以下

变革家五步投资法学习体会

变革家(Reformer),专注创业项目分析,帮股权投资者把好第一关! 拆解学院,是变革家的一个王牌课程,通过每周微信语音和网站内容形式,大力提升股权投资者的投资水平. 作为一名变革家的顶级Fans,最近认真完整地听取了其中的第十七课,"'五步投资法'精益投资,让你从业余到专业!" 之前都是在网站上学习文字版的内容,这次是认真参加了"微信课堂",及时学习了下. 自我感觉,这一课,非常好,可以说是"变革家课程体系的核心",所有的项目拆借报告.股权众

SEO艺术——使用高级搜索 学习体会

前言: 在这个信息大爆炸的时代,网上的信息鱼龙混杂,有的时候我们费尽体力脑力也得不到自己想要的结果.在这个环境下,学习一个高级的搜索技术是一个现代人越来越需要掌握的一门技术和方法.于是,自己利用自己的业余时间,学习SEO的艺术,学会使用高级搜索技巧的同时,也学习影响网站搜索排名的重要因素和提高网站搜索排名的重要方法. 这是一门非常有用的技术,对于一个即将走向IT行业岗位的人来说,学习SEO技术可以大大提高自己对IT这个行业的认识和理解.借来了SEO的艺术这本书,进行初步的学习,现在整理一下高级搜