Python-class类@staticmethod/@classmethod/@property的使用

"""
测试 静态方法 和类方法
"""


class cat(object):
    tag = "这是一只猫"
    __slots__ = ("name", "__age")

    def __init__(self, name, age):
        """
        设置属性 __age 为私有属性
        :param name:
        :param age:
        """
        self.name = name
        self.__age = age

    def eat(self):
        return "这只猫的名字叫[{0}],今年[{1}]岁了".format(self.name, self.__age)

    @staticmethod
    def breath():
        """
        使用@staticmethod 修饰符注释的方法为静态方法,
        因为是静态的 在调用时不用创建其对象
        也因为是静态的 不能单独使用本类的方法和全局变量
        不能对当前类做操作 也不能创建对象?????
        :return:
        """
        return "这个东西在呼吸"

    @classmethod
    def breath2(cls):
        """
        使用的@classmethod 修饰符注释的方法为类静态方法
        因为是静态的 在调用时不用创建其对象
        类静态修饰符相对方法静态修饰符 类静态方法可以访问并使用cls
        通过cls 可以创建当前对象 也可以访问当前全局变量
        相对方法静态修饰符有更大的便利性
        :return:
        """
        return "[{}],它在呼吸".format(cls.tag)


if __name__ == '__main__':
    print(cat.breath())

"""
测试 @property 高阶函数
"""


class cat(object):
    def __init__(self, name, age):
        """
        设置属性 __age 为私有属性
        :param name:
        :param age:
        """
        self.name = name
        self.__age = age

    def eat(self):
        return "这只猫的名字叫[{0}],今年[{1}]岁了".format(self.name, self.__age)

    """私有属性中 简单的对私有属性操作的步骤 """

    def get_age(self):
        return self.__age

    def set_age(self, value):
        self.__age = value

    """ 
    使用@property 对私有方法更高效简洁的处理 
    通过该装饰符对方法的修饰 可以把该方法装饰城属性类型调用 如 cat.age=10  print(cat.age)
    但是实际应用中该装饰符有实际应用意义吗???? 现在暂时觉得没啥意义
    """

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, value):
        if (not isinstance(value, int)) or value < 1 or value > 100:
            print("年龄数值为空或者不合理 请重新输入")
        else:
            self.__age = value


if __name__ == '__main__':
    cat1 = cat("小花", 13)
    print(cat1.eat())
    cat1.set_age(19)
    print(cat1.eat())
    cat1.age = 120
    print(cat1.age)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值