欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

python 类方法、静态方法和实例方法

最编程 2024-05-26 17:24:35
...
class Date: # 构造函数 def __init__(self, year, month, day): self.year = year self.month = month self.day = day def tomorrow(self): # 实例方法 # 只实现实例方法,暂时忽略处理逻辑 pass @staticmethod def parse_from_string(date_str): # 静态方法不需要传入对象self和类本身cls,所以当需要返回时,需要指定类名称 # 所以就有一个缺点,当类名称改变时,return的类名称就需要跟着修改 # 所以在此基础上有了另一外解决方式: 类方法 year, month, day = tuple(date_str.split('-')) return Date(year, month, day) @staticmethod def valid_str(date_str): # 忽略处理逻辑,这里只是为了说明静态方法的用途 year, month, day = tuple(date_str.split('-')) if int(year) > 0 and (int(month) > 0 and int(month) <= 12) and (int(day) > 0 and int(day) <= 31): return True else: return False @classmethod def from_string(cls, date_str): # 传入一个class, 不管类名称如何改变,都不会受影响 # 所以类方法,弥补了上面所说的静态方法的不足 # 这是不是意味着不需要静态方法了? # 并不是 # 比如: 当只需要验证字符串是否合法时,没有调用到类,这种情况用静态方法,就不会有任何问题。如上面的valid_str方法 year, month, day = tuple(date_str.split('-')) return cls(year, month, day) def __str__(self): return F"{self.year}/{self.month}/{self.day}" if __name__ == '__main__': new_day = Date("2018", "12", "31") # 调用实例方法 new_day.tomorrow() print(new_day) # 当类中没有处理 "2018-12-31" 这种参数时,需要在外部处理好后,传入到类中 date_str = "2018-12-31" year, month, day = tuple(date_str.split("-")) new_day = Date(int(year), int(month), int(day)) print(new_day) # 用staticmethod(静态方法)完成初始化 new_day = Date.parse_from_string(date_str) print(new_day) # 用classmethod(类方法)完成初始化 new_day = Date.from_string(date_str) print(new_day)

推荐阅读