大橙子网站建设,新征程启航

为企业提供网站建设、域名注册、服务器等服务

python3类中的装饰方法怎么选择-创新互联

小编给大家分享一下python3类中的装饰方法怎么选择,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

成都创新互联基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业西部信息服务器租用报价,主机托管价格性价比高,为金融证券行业服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。

@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://dzwzjz.com/article/geopi.html
在线咨询
服务热线
服务热线:028-86922220
TOP