"""
测试 静态方法 和类方法
"""
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)