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'>

  • 相关阅读:
    Struts2【UI标签、数据回显、资源国际化】
    Struts2【配置】知识要点
    Struts2与Spring整合
    Struts2入门这一篇就够了
    Hibernate最全面试题
    Hibernate【查询、连接池、逆向工程】
    Hibernate【缓存】知识要点
    Hibernate【inverse和cascade属性】知识要点
    输入法设置,SublimeTest,putty掉线
    Hibernate【映射】知识要点
  • 原文地址:https://www.cnblogs.com/wxl-dede/p/4993058.html
Copyright © 2011-2022 走看看