生活不易 我用pythonPython自学与资料分享程序员

Python3.x:面向对象:类变量、实例变量、构造函数

2018-02-01  本文已影响31人  james_chang
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

上一篇 下一篇

猜你喜欢

热点阅读