Python 小总结

一、python中@property的作用

1、使得python类中被@property装饰的方法可以像类属性一样被访问
例如:

	class Student:
	@property
	def method_with_property(self): --含@property
		return 15
	
	def method_without_property(self): --不含@property
	  return 16
		
	if __name__ == '__main__':
	student = Student()
	print(student.method_with_property) --加了@property后,可以用访问属性的形式来调用方法,后面不需要加()>>属性只能被访问,不能被调用通过function()的方式会报错 not callable
	print(student.method_without_property()) --没有加@property , 必须使用正常的调用方法的形式,即在后面加()>>不加的话不会报错,但是会输出函数存放的内存地址

2、Python 私有变量的定义:
在Python中,有以下几种方式来定义变量:
2.1、xx:公有变量
2.2、_xx: 单前置下划线,私有化属性或方法,类对象和子类可以直接访问
2.3、_xx: 双前置下划线,私有化属性或方法,无法在外部直接访问
2.4、_xx
: 双前后下划线,系统定义名字
2.5、xx_: 单后置下划线,用于避免与Python关键字冲突
例如: 在test类中定义了num,_num 和 __num三个属性,并创建了test的类对象t,对这三个属性进行访问,__num不能被访问到

	class test(object):
		def __init__(self):
		self.num = 10
		self._num = 20
		self.__num = 30
	t = test()
	print(t.num)    >> 10
	print(t._num)   >> 20
	print(t.__num)  >> AttributeError: 'test' object has no attribute '__num'

3、对python类中的私有属性进行操作的方法<方法有三>

	3.1、getter和setter方法
	
		class test(object):
			def __init__(self):
				self.__num = 10        >> 定义一个类私有属性,无法通过类对象直接访问
				
			def getNum(self):          >> 定义一个类方法,用于返回类的私有属性,因为在类的内部,类方法是可以访问类的私有属性的
				return self.__num  

			def setNum(self, value):   >> 定义一个类方法,用户设置更新类的私有属性的值
				self.__num = value

		t = test()
		print(t.getNum())   # 10
		t.setNum(20)
		print(t.getNum())   # 20
	
	3.2、property方法
	
		class test(object):
			def __init__(self):
				self.__num = 10

			def getNum(self):
				return self.__num
			
			def setNum(self, value):
				self.__num = value

			num = property(getNum,setNum) >> property()方法返回一个property属性,如果t是test的实例,那么t.num会调用getter方法,t.num = value会调用setter方法,而del t.num会调用deleter方法

		t = test()
		print(t.num)   # 10               >> 此处调用的是property()的getter方法
		t.num = 20
		print(t.num)   # 20               >> 此处调用的是property()的setter方法
	
	3.3、@property装饰器
		
		class C:
			def __init__(self):
				self.__x = None           >> 定义一个私有变量
				
			@property
			def x(self):				  >> 创建一个与私有变量一样的方法
				return self.__x			
				
			@x.setter
			def x(self, value):			  >> 通过x.setter设置类私有变量的值
				self.__x = value
				
			@x.getter                     >> 调用私有变量的值
			def x(self):
				return self.__x
				
			@x.deleter                    >> 删除变量的值
			def x(self):
				del self.__x

二、Python 静态方法
1、在开发中,我们常常需要定义一些方法,这些方法跟类有关,但在实现时并不需要引用类或者实例,例如,设置环境变量,修改另一个类的变量等。这个时候,我们可以使用静态方法。

class Dog(object):
		food = "gutou"
		age = "1"
		
		def __init__(self, name)
			self.name = name
			
		@staticmethod                     >> 定义一个静态方法,修饰print_info函数
		def print_info():
			print(Dog.food, Dog.age)      >> print_info函数(方法)与类有关,但是它调用时并没有引用类或者类的实例,所以使用静态方法

你可能感兴趣的:(Python)