zoukankan      html  css  js  c++  java
  • python staticmethod&classmethod

    python中的这两种方法都通过修饰器来完成

    静态方法

    不需要传递类对象或者类的实例

    可以通过类的实例.方法名a().foo()或者类名.方法a.foo()名来访问

    当子类继承父类时,且实例化子类时,这个实例其实时父类的,而非子类的

    静态方法的调用和普通方法的调用一样,只不过前面加个类名。

    静态方法并没有太大卵用,主要考虑代码的封装性,可维护性

    类方法:

        默认传递类对象本身cls,当然可以利用类中的方法

        可以通过类的实例.方法名a().foo()或者类名.方法a.foo()名来访问

        当子类继承父类时,方法正常使用

    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

        print self.day, self.month, self.year

      @classmethod

      def from_string(cls,date_string):

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

        date1 = cls(day, month, year)                      #cls是个类对象,不是实例

        return date1                                    #返回Date实例

      def foo(self):

        print 'I am foo'                        #普通的方法

      @staticmethod

      def is_date_valid(date_string):                    #验证方法封装在类中

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

        return day <= 31 and month <= 12 and year <= 3999    

    ---------------------------------------------------------------------------------------------

    a=Date(1,2,3)

    1 2 3

    >>> a=Date.from_string('09-08-2015')

    9 8 2015

    >>> a.foo()

    I am foo

    >>> Date.is_date_valid('10-10-2015')

    True

    >>> type(Date.is_date_valid)

    <type 'function'>

  • 相关阅读:
    perl学习笔记之:正则表达式
    POJ 3436 ACM Computer Factory (拆点+输出解)
    POJ 3436 ACM Computer Factory (拆点+输出解)
    POJ 1637 Sightseeing tour ★混合图欧拉回路
    POJ 1637 Sightseeing tour ★混合图欧拉回路
    POJ 1149 PIGS ★(经典网络流构图)
    POJ 1149 PIGS ★(经典网络流构图)
    HDU 4571 Travel in time ★(2013 ACM/ICPC长沙邀请赛)
    HDU 4571 Travel in time ★(2013 ACM/ICPC长沙邀请赛)
    UPC 2224 Boring Counting ★(山东省第四届ACM程序设计竞赛 tag:线段树)
  • 原文地址:https://www.cnblogs.com/wxl-dede/p/4993058.html
Copyright © 2011-2022 走看看