Python中类属性和实例属性总结-自学整理

  1. 类属性一般定义在类的方法外面,实例属性定义在类的方法内部(既可以是初始化构造函数也可以是其他的类方法)
  2. 定义在构造函数中的实例属性会在类实例化后调用__dict__可以直接查看,而定义在实例方法中的实例属性需要在调用该方法后方可用__dict__来查看。
  3. 类属性和实例属性都可以是公有属性和私有属性,公有属性可以通过类名.属性名和实例名.属性名访问,私有属性需要用特殊的方式访问,建议不要强行去访问,但是在类的内部可以用类名.属性名和实例名.属性名访问和修改。对私有属性通过不同的实例方法实现访问,也就是所谓的封装,同时开放接口供外部访问
  4. 打印类.__dict__是不显示实例属性的,打印实例.__dict__可以显示所有被执行过的实例属性(放在构造函数中的会直接显示,放在其他方法中的只有在方法调用后才会显示)
class Person():
    name='jacky'#定义一个类属性
    def __init__(self):
        self.age=18
    def test(self):
        self.country='China'
print('打印未实例化类属性:',Person.__dict__)
p=Person()
print('打印实例化后类属性:',Person.__dict__)
print('打印实例化后的实例属性:',p.__dict__)
p.test()
print('打印调用test方法后的类属性:',Person.__dict__)
print('打印调用test方法后的实例属性:',p.__dict__)

对比运行结果

  1. 当在方法中通过类名.属性名,对类属性更改时可以改变类属性
  2. 当在方法中通过self.属性名,对类属性更改时只改变实例的属性
    因为当类实例化时候会开辟内存空间来储存被使用或者初始化的属性,个人理解是类本身占用一个储存空间,而每实例一次就创建一个内存空间。
class People():
    __name='jacky' #私有类属性,不可以通过类名或者实例名访问属性,但是可以通过类名._类名__属性名
print(People._People__name)

class Human():
    country='China'#公有类属性
    def __init__(self,name,age):
        self.name=name
        self.age=age
        self.country='US'#初始化实例属性
        Human.country='England'#初始化类属性
    def eat(self):
        self.name='lucy'
print(Human.country)
h=Human('jack',30)#实例化类
print(Human.country)#访问类属性,而类的属性由于初始化构造函数中直接修改了,获取的是初始化类属性,而不是实例属性
print(h.country)#访问实例属性,由于实例属性是单独的储存空间,所以并不会更改公有类属性值
print(Human.__dict__)
print(h.__dict__)
h.eat()#这个方法被调用后,就会激活方法中的赋值语句改变实例属性name并改变它的值
print(h.__dict__)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值