关于python静态方法 @staticmethod,类方法:@classmethod以及@property的使用

类的静态方法:@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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值