python实例变量不能在构造函数中确定值_Python3.x:面向对象:类变量、实例变量、构造函数...

class Foo(object):

# 类变量a

name = '我是类里面的'

a = 10

# 构造函数__init__,在实例化的时候做一些类的初始化的工作

def __init__(self, name, age, number, adress, sex='man', hobby='girl'):

self.name = name # 统称为实例变量(静态属性),作用域为实例本身

self.age = age

self.number = number

self.adress = adress

self.sex = sex

self.hobby = hobby

# 类方法

def eat(self):

pass

def walk(self):

pass

def play(self):

pass

print(Foo.a) # 类变量没有实例化也可以调用,实例化之后通过实例也可以调用

r1 = Foo('James', 18, 1100000000, 'home') # 实例化一个对象

print(r1.name) # 先找实例本身,没有的话就去类里找

print(r1.hobby)

print(r1.a)

通过上面的一段代码,来了解一下类变量,实例变量和构造函数:

首先定义了一个Foo类

通过缩进可以看出来,类的下面直接定义了两个变量name和a,这两个变量就叫做类变量

接着定义了一个__init__函数,这个函数就叫做构造函数,他的作用是在类实例化生成对象的时候对做一些类的初始化的工作,这里我理解的是对实例化产生的对象做一些初始化工作,可以看到需要传一些参数,后面两个参数我给了默认值,就是如果后面两个参数不传值,就默认为我在代码里输入的这个值

下面的self.xx = xx就是定义实例变量,也叫做静态属性,它的作用域就是实力化产生的实例本身

紧接着下面的三个函数eat、walk、play是自己随便写的三个函数,属于类方法,到这里,一个简单的类就完成了

先来打印下变量a吧,这里是可以打印成功的,类变量在没有实例化对象前也是可以使用的,但是你想打印实例变量就不行了,那要等到实例化之后才可以操作

接着我实例化产生了一个对象r1,是由Foo类实例化产生的,给name、age、number、adress传了参数,剩下的两个变量使用的是默认值,当然我也可以穿入参数来改变

然后看我打印了变量name,这时候可能会问,有两个变量name,一个类变量name,一个实例变量name,会打印哪个?

如果在没有实例化之前打印的话,肯定打印的是类变量name,但是如果实例化之后呢,就会有一个寻找的过程和顺序,他会先在实例变量中找,如果没有的话就会在类变量中找,也就是说这个时候输出的是实例变量name,可能还会有人问打印的是r1.name,是这个实例的name,如果实例变量没有还会去类里面找么?答案是会,拿这个例子来说,如果构函数里面没有name变量,他就会输出类变量name

综上,就是拿这个小例子来帮助我们理解类变量、实例变量、构造函数,希望能帮到你

转载请注明出处

python自学技术互助扣扣群:670402334

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值