python3类中的装饰方法怎么选择
小编给大家分享一下python3类中的装饰方法怎么选择,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名、虚拟主机、营销软件、网站建设、浑江网站维护、网站推广。
@classmethod 用来修饰方法。使用在实例化前与类进行交互,但不和其实例进行交互的函数方法上。
@staticmethod 用来修饰类的静态方法。使用在有些与类相关函数,但不使用该类或该类的实例。如更改环境变量、修改其他类的属性等。
两者最明显的区别,classmethod 必须使用类的对象作为第一个参数,而staticmethod则可以不传递任何参数
1、@classmethod 类方法
类方法,我们不用通过实例化类就能访问的方法。而且@classmethod 装饰的方法不能使用实例属性,只能是类属性。它主要使用在和类进行交互,但不和其实例进行交互的函数方法上。
下面,我们要写一个只在类中运行而不在实例中运行的方法。
简单示例,读取私有化类属性数据,如下:
class Circle(object): __pi = 3.14 def __init__(self, r): self.r = r @classmethod def pi(cls): return cls.__pi def area(self): """ 圆的面积 """ return self.r ** 2 * self.__pi print(Circle.pi()) # 没有实例化 能直接访问pi() 方法 circle1 = Circle(2) print(circle1.pi()) # 也可以通过实例访问pi()方法
2、@staticmethod 静态方法
@staticmethod 和@classmethod非常的相似,但是@staticmethod 不强制要求传递参数(它做的事与类方法或实例方法一样)。
@staticmethod使用在有些和类相关函数,但不使用该类或者该类的实例。如更改环境变量、修改其他类的属性等。
一句话@staticmethod 修饰的方法是放在类外的函数,我们为了方便将他移动到了类里面,它对类的运行无影响。
示例:
class Date(object): day = 0 month = 0 year = 0 def __init__(self, year=0, month=0, day=0): self.day = day self.month = month self.year = year @classmethod def from_string(cls, date_as_string): year, month, day = date_as_string.split('-') date = cls(year, month, day) return date @staticmethod def is_date_valid(date_as_string): """ 用来校验日期的格式是否正确 """ year, month, day = date_as_string.split('-') return int(year) <= 3999 and int(month) <= 12 and int(day) <= 31 date1 = Date.from_string('2012-05-10') print(date1.year, date1.month, date1.day) is_date = Date.is_date_valid('2012-09-18') # 格式正确 返回True
看完了这篇文章,相信你对python3类中的装饰方法怎么选择有了一定的了解,想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
网站题目:python3类中的装饰方法怎么选择
网页地址:http://scyanting.com/article/gecpdg.html