类的静态方法:@staticmethod
解释:静态方法是类中的函数,不需要实例化使用,可直接 类名.静态方法名使用。静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是 说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。
写法:加入关键字@staticmethod,方法中不需要传入self了
调用:可以直接使用类名.方法名调用,也可以实例化调用
适用:对传入数据进行初始化操作,可以使用在加入判断,检查数据是否合法
类方法:@classmethod
解释:类方法是将类本身作为对象进行操作的方法。假设有个方法,且这个方法在逻辑上采用类本身作为对象来调用更合理,那么这个方法就可以定义为类方法。另外,如果需要继承,也可以定义为类方法。
写法:加入关键字@classmethod,方法中需要传入cls,cls指代类本身
调用:可以直接使用类名.方法名调用,也可以实例化调用
适用:对传入数据进行初始化操作,可以使用在加入判断,检查数据是否合法,数据合法后可以直接传回cls类。另外,使用cls指代类本身,即使类改变也无需改变类方法
@property:
解释:作用就是通过@property把一个方法变成一个静态属性,意思就是我们像调用函数的属性一样调用该方法。
写法:以属性名命名的方法前加入@property,一般还需要配合属性名.setter设置一个可以更改属性的入口
调用:可以直接使用类名.方法名调用,也可以实例化调用
适用:1.方便属性的更改及调用(可以直接类名.属性名的方式更改及调用);2.作为参数检查,对传入的不符合规则的参数做出错误处理
# -*- encoding=utf-8 -*-
class Data:
def __init__(self, year, month, day, name=None):
self._name = name
self.year = year
self.month = month
self.day = day
@property
def name(self):
return self._name
@name.setter
def name(self, name_str):
if isinstance(name_str,str):
self._name = str
return self._name
else:
print("输入格式不正确")
@staticmethod
def date_format(data_str):
year, month, day = tuple(data_str.split("/"))
return Data(int(year), int(month), int(day))
@classmethod
def data_info(cls, data_str):
year, month, day = tuple(data_str.split("/"))
return cls(int(year), int(month), int(day))
def __str__(self):
return "格式化后的日期为:{},{},{}".format(self.year, self.month, self.day)
if __name__ == '__main__':
#####################试验@property##################################
# 使用普通实例方法调用类的name属性
data = Data(1996, 9, 3, "小陈")
print(data.name) #输出小陈
# 直接使用类.属性名的方式修改属性,以及打印属性
Data.name = "小王"
print(Data.name) #输出小王
#####################试验@staticmethod###############################
data_str = "1996/9/3"
data1 = Data.date_format(data_str) #传入data_str对数据进行初始化
print(data1) #格式化后的日期为:1996,9,3
#########################试验@classmethod###############################
data_str = "1996/9/3"
data2 = Data.data_info(data_str) #传入data_str对数据进行初始化
print(data2) #格式化后的日期为:1996,9,3