Python学习笔记
类变量和实例变量
类变量与实例变量的定义
- 类变量:在类空间或通过类引用复制的变量
- 实例变量:通过对象引用或self引用赋值的变量
class User:
category = "未知类型"
def __init__(self, name = "User", password = "123456"):
self.name = name
self.password = password
User.type = "通用用户"
类、对象可访问类变量
- 通过类,可获取、修改类变量的值;
- 通过对象,可获取类变量的值;
- 如果尝试通过对象为类变量赋值,就变成了新增实例变量。
- 如对于上述程序,可以使用打印语句将其值打印出来
print(User.category)
- 上述语句运行结果是:
通用用户
- 我们也可以通过类来修改类变量的值,如
User.category = "After changed"
print(User.category)
User.type = "Second change"
print(User.category)
print(User.type)
After changed
After changed
Second change
- 但是如果是通过对象引用类变量,就不能对其进行赋值:
us = User()
print(us.category)
us.category = "实例类型"
print(us.category)
print(User.category)
未知类型
实例类型
未知类型
使用property合成属性
- 使用
property
合成属性相当于实例变量 - 原型:
property(fget=None, fset=None, fdel=None, doc=None)
- 使用
property()
函数定义属性时也可根据需要只传入少量参数,如合成只读属性就无需合成fget
参数
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def getarea(self):
print("getarea实例方法")
return self.width * self.height
area = property(fget = getarea, doc = "获取面积的属性")
def getsize(self):
print("getsize实例方法")
return self.width, self.height
def setsize(self, size):
print("setsize实例方法")
self.width = size[0]
self.height = size[1]
size = property(fget = getsize, fset = setsize, doc = "获取大小的属性")
r = Rectangle(30, 40)
print(r.area)
getarea实例方法
1200
print(r.size)
getsize实例方法
(30, 40)
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def getarea(self):
print("getarea方法")
return self.width * self.height
@property
def setsize(self):
print("setsize方法")
return self.width, self.height
@setsize.setter
def setsize(self, size):
print("setsize方法")
self.width = size[0]
self.height = size[1]
r = Rectangle(30, 40)
print(r.getarea)
print(r.setsize)
getarea方法
1200
setsize方法
(30, 40)