python基础--装饰器、类的介绍(十)

该博客主要介绍Python基础中的装饰器和类。装饰器和类是Python编程里重要的概念,掌握它们有助于提升Python编程能力,在后端开发等场景有广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 装饰器
#	创建函数,在函数计算前,计算后打印输出
#	如果直接在函数中修改,函数过多很麻烦并且难以维护。	
def add(a,b):
	r = a + b
	return r
def mul(a,b):
	r = a * b
	return r
print(add(123,23))

# 创建一个函数让这个函数自动生产函数
# begin_end函数就是装饰器,通过装饰器可以在不修改函数的情况下对函数进行扩展。
# 定义函数时,可以使用@装饰器来使用该装饰器来装饰需要装饰的函数。一个函数同时可以使用多个装饰器。
def begin_end(old):
	'''
		*args : 接受任意数量参数
		*kwargs : 接受任意关键字参数
	'''
	def new_func(*args,**kwargs):
		print('begin')
		res = old(*args,*kwargs)
		print('end')
		return res
	return new_func
res = begin_end(add)
res = begin_end(mul)
print(res(123,123))

@begin_end
def hello():
	print('hello')
hello()




# 面向对象
# python是一门面向对象的编程语言,所谓面向对象的语言,简单来说就是语言中的所有操作都是通过对象来进行的
# 类
class MyClass:
	pass
mc = MyClass()
print(mc,type(mc))

class  Person(object):
	print('start')
	# 在类中可以定义一些特殊的方法
	# 这些特殊方法都是以__开头__结尾
	# 特殊方法不需要我们自己调用,会在调用类的时候自动调用。
	def __init__(self):
		print('init')
		pass

	# self 第一个参数self 就是调用对象本身
	def say_hello(self):
		# print(self)
		print(self.name)


p = Person()
p1 = Person()
p.name = 'jason1'
p1.name = 'jason2'
p.say_hello()
# print(p)
p1.say_hello()
# print(p1)

# 创建一个包含多个属性的类
class Dog:
	def __init__(self,name,age,gender,height):
		# 可以通过修改内部的属性名称来提高安全性
		self.hide_name = name
		self.hide_age = age
		self.gender = gender
		self.height = height

	def set_name(self,name):
		# 在set方法中可以进行一些逻辑校验处理
		self.hide_name = name

	def set_age(self,age):
		if age > 0:
			self.hide_age = age

	def get_name(self):
		return self.hide_name

	def get_age(self):
		return self.hide_age

	def run(self):
		print('run')

	def eat(self):
		print('eat')

d = Dog('ha11',8,'男',20)
# 在外部任然可以任意修改对象的属性,安全性非常低
# 这样就需要对这些属性进行封装,使外部无法访问一些属性来提高安全性。
# 	使用封装增加了类定义的复杂度,但是确保了数据的安全性
# 			隐藏属性名称,调用者无法随意修改对象中的属性
# 			增加getter,setter方法,很好的控制属性是否只读,并且可以进行其他的一些逻辑处理。
# 			使用setter设置属性,可以增加数据的验证
# 			
# print(d.name,d.age,d.gender,d.height)
print(d.set_age(-3))
print(d.get_age())
d.run()
d.eat()


# 可以给对象的属性使用双下划线__开头,
# 双下划綫开头的属性是对象的隐藏属性,隐藏的属性只能在类的内部访问,无法通过对象访问。
class Rectangle:

	def __init__(self,width,height):
		self._width = width
		self._height = height

	def get_width(self):
		return self._width

	def get_height(self):
		return self._height

	def set_width(self,width):
		self._width = width

	def set_height(self,height):
		self._height = height

	def get_area(self):
		return self._height * self._width

rect = Rectangle(12,12)
print(rect.get_area())
# print(rect.__width) # 访问报错
# python内部给双下划线开头的属性自动加上了类名前缀
# 严格来说还是可以访问,一般都会使用_开头设置私有属性。
# print(rect._Rectangle__width)


# property装饰器,用来将一个get方法转换为对象的属性
# 添加property装饰器后,我们就可以像调用属性一样使用get方法
# 使用property装饰器的方法名必须和属性名一样。
class Person:
	def __init__(self,name,age):
		self._name = name
		self._age = age

	@property
	def name(self):
		return self._name

	@name.setter
	def name(self,name):
		self._name = name


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

	@age.setter
	def age(self,age):
		self._age = age

p = Person('jack',15)
print(p.name,p.age)




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值