python要注意的地方:类属性和实例属性

一、类属性

1、声明在类的内部,实例方法的外部的属性(在class内,inint(self)方法之前)
2、类变量在class内,但不在class的方法内,存在类的内存里
3、类变量是该类所有实例共享的变量,但是实例对象只能访问,不可修改,每个实例对象去访问同一个类变量都将得到相同结果【实例名.类变量名】
4、类无权访问实例名
5、类变量可修改、新增、删除

二、实力属性

实例属性是从属于实例对象的属性,也称为“实例变量”。他的使用有如下几个要点:

1、实例属性一般在__init__()方法中通过如下代码定义:

self.实例属性名 = 初始值

2、在本类的其他实例方法中,也是通过self进行访问: self.实例属性名

创建实例对象后,通过实例对象访问:

obj01 = 类名() #创建和初始化对象,调用__init__()初始化属性

obj01.实例属性名 = 值 #可以给已有属性赋值,也可以新加属性
3、实例变量是构造函数下的变量带self.变量。
4、实例变量可修改、新增、删除。
5、实例改类变量,不可修改,实际是在实例内存里创建了实例变量

重要

1、如果在类外修改类属性,必须通过类对象去引用然后进行修改。
2、如果通过实例对象去引用修改,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性。
3、当类属性与实例属性同名时,一个实例访问这个属性时实例属性会覆盖类属性,但类访问时不会
代码引用自:https://blog.csdn.net/sehanlingfeng/article/details/92415782

# 类属性和实例属性
 
 
class Student:
 
    count = 10                              # count是类属性
 
    def __init__(self, name):
        self.name = name                    # name是实例属性
 
 
print(Student.count)                        # 10 通过类来访问类属性
# print(Student.name)                         # 报错:AttributeError: type object 'Student' has no attribute 'name'
 
s1 = Student("xiaoming")
print(s1.name)                              # xiaoming 必须通过实例来访问实例属性name
print(s1.count)                             # 10 实例也可以访问类属性
 
 
# 通过实例更改类属性的值,不影响类访问类属性的值
 
s1.count = 50
print(s1.count)                             # 50 实例更改类属性的10为50
print(Student.count)                        # 10 通过类访问count的值,发现还是原来的10,并没有被改成50
 
# 通过类更改类属性的值,不影响实例访问类属性的值
 
Student.count = 33
print(s1.count)                             # 50 实例访问类属性值为上次更改的值50,不是类更改的值33
print(Student.count)                        # 33 类访问类属性的值是被更改的33
 
 
# 另外实例化一个对象,其值不是默认值,而是上次由类更改类属性后的值
 
s2 = Student("xiaohua")
print(s2.count)                             # 33 此处对象访问的count值为33,而不是默认值10,也不是之前由对象更改的值50
print(Student.count)                        # 33 这里也是33,而不是默认值10

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值