总
对于类:
属性为全局变量;调用、修改见详情
实体属性(self.变量名) 为 方法运行后 的 全局变量;调用、修改见详情
局部变量;外部无法调用、修改
因为必须赋值,所以根据不同场景选择合适的(应该是为了防止内存浪费,类似于野指针)
类定义时
(1) 方法(类中的函数)
(2) 属性(类中的变量)(类的 全局变量)
(3) 实体属性(在方法中,self.变量名)(必须在 方法运行后 的 全局变量;因此一般在 构造函数 中)
(4) 局部变量(在方法中,变量)
注意:属性、局部变量、实体属性 都必须 赋值
外部调用时
(1) 方法、属性,类和实例 均 正常调用
(2) 实体属性,必须在 方法运行后 调用(因此一般定义在 构造函数 中),且仅实例可修改它
(3) 局部变量,无法调用
(4) 实体可以再定义新的 属性,但仅自身用 #资料多,本文略
外部修改时
(1) 属性 只有 类 可以修改类中的;实体无法修改属性,实体只能修改自身的
(2) 实体属性 因为必须在方法运行后,所以只能实例 修改自身的;因此类 无法修改它
举例:
class User:
a = 0
def __init__(self):
self.b = 10
def fun(self):
self.b = 20 # 将实体属性修改
c = 30
if __name__ == '__main__':
print("User.a 为 ", User.a) # 类 调用类中的 属性
print("User().a 为 ", User().a) # text()为实体,实体 调用类中的 属性
print("User().b 为 ", User().b) # print(text.b) 会报错,因为 类 没有运行构造函数
me = User()
# 注意,此时
# User # 类
# User() # 实体
# me # 实体
print("me.a 为 ", me.a) # 实体 调用类中的 属性
print("me.b 为 ", me.b) # 实体 调用 实体属性;构造函数已运行,因此可调用实体属性
me.fun() # 方法运行
print("me.b 为 ", me.b) # 方法运行后,方法将实体属性修改;但没有修改
me.b -= 1 # me的实体属性被修改
print("me.b 为 ", me.b)
print("User().b 为 ", User().b) # User()新实体,实例属性b未被修改,还是10
运行结果
User.a 为 0
User().a 为 0
User().b 为 10
me.a 为 0
me.b 为 10
me.b 为 20
me.b 为 19
User().b 为 10