(干货)python中类的 属性、实体属性(self.变量名)、局部变量的区别

对于类:
属性全局变量;调用、修改见详情
实体属性(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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值