python 实例变量_python中的实例变量内容学习

最近在学python中的类变量和实例变量内容,之前在学java的时候,也有了解过类变量和实例变量,具体可查看这个文章:https://www.cnblogs.com/baby-zhude/p/8011969.html

总的来说就是在java中类变量也叫静态变量,也就是在变量前加了static 的变量;

实例变量也叫对象变量,即没加static 的变量;

区别在于:

类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;

而在python中却又有点不一样了,虽然类变量仍然是所有实例对象共有的属性,但是其中一个对象将它的值改变后,其他对象得到的并不是改变后的结果;

我们先将下面的代码输入到编译器中:

class Vehicle():

category = '?'

def __init__(self, wheelcount, power): # 初始化类

self.wheelcount = wheelcount # 定义实例变量wheelcount

self.power = power # 定义实例变量power

def drive(self, distance): # 定义drive方法

try:self.totaldistance += distance # 判断实例变量totaldistance是否存在

except: self.totaldistance = distance # 不存在就创建totaldistance这个实例变量,并将distance的值赋值给self.ttotaldistance

return distance # 将distance的值返回给方法drive

def gettotaldistance(self): # 定义gettotaldistance方法

if not hasattr(self, 'totaldistance'): self.totaldistance=(); # 判断实例变量totaldistance是否存在,不存在就创建totaldistance这个实例变量,并将()赋值给该实例变量

return self.totaldistance # 返回totaldistance这个实例变量的值赋值给gettotaldistance

def dirp(iter): # 定义函数dirp

return [i for i in dir(iter) if not i.startswith('__')] # 将dir(iter)的值中过滤掉前面带__的数据后,赋值给变量i,然后将i的值赋值给dirp函数

hippomobile = Vehicle(2, '马车') # 创建Vehicle的实例对象hippomobile

car = Vehicle(4, '小汽车') # 创建Vehicle的实例对象car

print(dirp(car), dirp(hippomobile)) # 打印实例对象car和hippomobile中包含的方法和属性

car.category = 'machine' # 将值machine赋值给实例对象car中的category属性

print(car.category) # 打印实例对象car的category属性值

print(hippomobile.category) # 打印实例对象hippomobile的category属性值

car.oil = 0 # 为实例对象car定义一个oil属性

truck = Vehicle(4, '卡车') # 创建Vehicle的实例对象truck

print(truck.category) # 打印实例对象truck的category属性值

print(dirp(car), dirp(truck)) # 打印实例对象car和truck中包含的方法和属性

print(car.drive(100)) # 打印car的drive方法的值

print(dirp(car)) # 打印实例对象car的方法和属性

print(car.gettotaldistance()) # 打印car的gettotaldistance方法的值

print(dirp(car)) # 打印实例对象car的方法和属性

print(truck.gettotaldistance()) # 打印truck的gettotaldistance方法的值

print(dirp(truck), dirp(hippomobile)) # 打印实例对象truck和hippomobile的方法和属性

然后执行代码,查看结果:

C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python.exe C:/Users/Administrator/Desktop/mypython/class_Vehicle.py

['category', 'drive', 'gettotaldistance', 'power', 'wheelcount'] ['category', 'drive', 'gettotaldistance', 'power', 'wheelcount']

machine

?

?

['category', 'drive', 'gettotaldistance', 'oil', 'power', 'wheelcount'] ['category', 'drive', 'gettotaldistance', 'power', 'wheelcount']

100

['category', 'drive', 'gettotaldistance', 'oil', 'power', 'totaldistance', 'wheelcount']

100

['category', 'drive', 'gettotaldistance', 'oil', 'power', 'totaldistance', 'wheelcount']

()

['category', 'drive', 'gettotaldistance', 'power', 'totaldistance', 'wheelcount'] ['category', 'drive', 'gettotaldistance', 'power', 'wheelcount']

进程已结束,退出代码0

可以看到,我们在Vehicle类中声明了一个category的类变量后,之后在实例对象car中将category的值变更为“machine”之后,其他对象的category属性的值并没有跟着发生变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值