Python面向对象——静态属性,类方法,静态方法

静态属性:@property
类方法:@classmethod
静态方法:@staticmethod
都是在定义class类内部的功能属性添加装饰器来达到另一个效果。

静态属性的作用:@property加到功能属性开头,使的功能属性的调用方式和调用静态属性的方式相同。
没有加@property的调用方式如下:

class Person:
	country = "中国"
	def __init__(self, name, age, sex):
		self.name = name
		self.age = age
		self.sex = sex
	def sleep(self):
		return "{}正在吃饭".format(self.name)
		
# 此时调用sleep方法
p1 = Person("小明", 18, "男")
print(p1.sleep())
# 调用数据属性的方法
print(p1.name)

当在sleep方法加上@property装饰器后的调用方法:

class Person:
	country = "中国"
	def __init__(self, name, age, sex):
		self.name = name
		self.age = age
		self.sex = sex
	@property
	def sleep(self):
		return "{}正在吃饭".format(self.name)
		
# 此时调用sleep方法
p1 = Person("小明", 18, "男")
print(p1.sleep)
# 调用数据属性的方法
print(p1.name)
#此时调用sleep的方法和调用静态属性的方法相同,@property的功能就是将类内部功能属性的调用方式和静态属性的调用方式达到一致的功能。

类方法的作用:一般情况下类里面定义的功能属性想要调用就必须先将类实例化,然后才能调用,将@classmethod加到功能属性的前面,这样可以在不实例化的情况下用类直接调用。
没有加@classmethod装饰器的sleep的调用方式

class Person:
	country = "中国"
	def __init__(self, name, age, sex):
		self.name = name
		self.age = age
		self.sex = sex
	
	def sleep(self):
		return "{}正在吃饭".format(self.name)

# 此时想要调用sleep功能属性就必须先将Person类实例化,然后才能调用。
p1 = Person("小明", 18, "男")
#第一种调用方式
print(p1.sleep())
#第二种调用方式
print(Person.sleep(p1))

加了@classmethod后sleep的调用方式

class Person:
	country = "中国"
	def __init__(self, name, age, sex):
		self.name = name
		self.age = age
		self.sex = sex
	@classmethod
	def sleep(cls, x):
		return "{}正在吃饭".format(x)  #加完@classmethod后sleep功能属性的参数将变成cls

# 此时调用sleep功能属性将不用将类实例化,直接用类名就可以调用
print(Person.sleep("小明"))

静态方法:@staticmethod
静态方法的作用:在类里面的功能加上@staticmethod,将把加上装饰器的功能属性独立出来,相当存在于类里面的独立的函数,参数不用加上self和cls.

class Person:
	country = "中国"
	def __init__(self, name, age, sex):
		self.name = name
		self.age = age
		self.sex = sex
	@staticmethod
	def sleep(x):
		return "{}正在吃饭".format(x)  #加完@classmethod后sleep功能属性的参数将不用加self 和cls,  此时将不能调用类的属性以及实例属性,相当于独立出来的个体函数

p1 = Person("小明", 18, "男")
# 此时调用sleep功能属性
print(Person.sleep("小明"))
print(.sleep("小明"))

总结:静态属性:@property 和类以及实例化都有关系,将功能属性装饰成静态属性
类方法:@classmethod 和类有关系,和实例化脱离关系,不需要实例化也可以调用功能属性
静态方法:@staticmethod 和类以及实例化都没有关系,相当于在类里面存在的独立的个体功能属性。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值