当前位置:   article > 正文

面向对象中的方法(装饰器的应用)_使用对象作为装饰器

使用对象作为装饰器

### 面向对象中的方法

"""
普通方法:  可以有参数,或者无参数,当场正常的函数调用
绑定方法:  (1) 绑定到对象(自动传递参数为对象) (2) 绑定到类(自动传递参数为类)
静态方法:  无论是对象还是类,都可以调用,不会默认传递任何参数
"""

class Dog():
	name = "旺财"

	# 普通方法
	def jiao():
		print("小狗哇哇哇的叫唤")
	
	# 绑定方法(对象)
	def eat(self):
		print("小狗喜欢吃骨头")
	
	# 绑定方法(类)
	@classmethod
	def tail(cls):
		print(cls)
		print("小狗看到主任喜欢摇尾巴")
	
	#静态方法
	@staticmethod
	def jump(num):
		print("小狗喜欢接飞盘")

obj = Dog()
普通方法 (无参方法只能类调用)
obj.jiao() error
Dog.jiao() 
绑定方法 (一般用对象调用)
obj.eat()  #(推荐)
Dog.eat(12356)
绑定方法(类) 
"""系统自己把类当成参数进行传递"""
Dog.tail() #(推荐)
obj.tail()
静态方法 (不会默认传递任何参数,如果有参数,当成普通方法调用即可.)
obj.jump(1)
Dog.jump(2)
在类外,为对象添加成员方法,默认皆是静态方法.
obj.func = lambda  : print(123)
obj.func()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

### property

"""
property 可以把方法变成属性使用
作用: 控制属性的获取,设置,删除操作,
变相的增加成员的安全性.可以通过自定义逻辑对成员进行控制

自动触发: 要求:是同一个名字
	获取 @property
	设置 @属性名.setter
	删除 @属性名.deleter

"""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

方法一

class MyClass():
	def __init__(self,name):
		self.name = name
	
	@property
	def username(self):
		return self.name
		# pass
	
	@username.setter
	def username(self,val):
		print(112233)
		val = "朴仁猛"
		self.name = val
		# pass

	@username.deleter
	def username(self):
		# 如果发现有删除行为,可以在这个方法中拒绝删除
		# pass
		del self.name

	
obj = MyClass("小芳")
获取属性 (自动触发获取方法 @property)
print(obj.username())
print(obj.username)
设置属性 (自动触发设置方法) val形参自动接收设置的值
obj.username = "朴仁猛"
print(obj.username)
删除属性
del obj.username
print(obj.username) error
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

方法二

class MyClass():
	def __init__(self,name):
		self.name = name
	
	# 获取
	def get_username(self):
		return self.name

	
	# 设置
	def set_username(self,val):
		# val = "朴仁猛"
		self.name = val


	# 删除
	def del_username(self):
		# 如果发现有删除行为,可以在这个方法中拒绝删除
		del self.name
	
	# 顺序必须按照  获取 -> 设置 -> 删除 的参数进行传递
	username = property(get_username,set_username,del_username)
	
obj = MyClass("朴飘乐")
# 获取
print(obj.username)
# 设置
obj.username = "朴一生"	
print(obj.username)
# 删除
del obj.username
print(obj.username) #error 被删掉了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/336283
推荐阅读
相关标签
  

闽ICP备14008679号