美文网首页
python3-面向对象之类变量、实例变量和局部变量

python3-面向对象之类变量、实例变量和局部变量

作者: Snails_Tin | 来源:发表于2021-07-23 11:42 被阅读0次

类变量:位于所有函数之外,类之内的变量,也称为类属性。

实例变量:位于所有函数之内,类之内的变量,以”self.变量名“方式定义,也可称为实例属性。

局部变量:位于所有函数之内,类之内的变量,以”变量名=变量值“的方式定义。

一、类变量

class Language :
    # 下面定义了2个类变量
    name = "Python"
    add = "http//www.baidu.com"

    # 下面定义了一个say实例方法
    def test(self, content):
        print(content)

如上所示:

name和add是类变量,类变量对于所有的实例化变量都是共享的,可以通过类的实例化对象和类名来调用类变量。

类变量调用

1.类名调用

class Language :
    # 下面定义了2个类变量
    name = "Python"
    add = "http//www.baidu.com"

    # 下面定义了一个say实例方法
    def test(self, content):
        print(content)

if __name__ == '__main__':
    print(Language.name)
    print(Language.add)

--输出:
Python
http//www.baidu.com

2.类的实例化对象调用

class Language :
    # 下面定义了2个类变量
    name = "Python"
    add = "http//www.baidu.com"

    # 下面定义了一个say实例方法
    def test(self, content):
        print(content)

if __name__ == '__main__':
    l = Language()
    print(l.name)
    print(l.add)

--输出:
Python
http//www.baidu.com

修改类变量

修改类变量可以通过类名修改类变量的值,由于类变量是与所有的实例化对象共享的,所以通过这种方式修改类变量后,会影响所有的实例化对象。例子如下:

通过类名修改类变量

class Language :
    # 下面定义了2个类变量
    name = "Python"
    add = "http//www.baidu.com"

    # 下面定义了一个say实例方法
    def test(self, content):
        print(content)

if __name__ == '__main__':
    print("修改前类变量的值")
    print(Language.name)
    print(Language.add)
    Language.name = "Java"
    Language.add = "bbb"
    print("修改后的类变量的值")
    print(Language.name)
    print(Language.add)
    print("修改后的实例变量的值")
    l = Language()
    print(l.name)
    print(l.add)

输出:

image.png

通过类的实例化对象是无法修改类变量的,通过类对象对类变量赋值,但本质不是修改类变量的值,而是在给该实例对象定义新的实例变量。

class Language :
    # 下面定义了2个类变量
    name = "Python"
    add = "http//www.baidu.com"

    # 下面定义了一个say实例方法
    def test(self, content):
        print(content)

if __name__ == '__main__':
    l = Language()
    l.name = "C++"
    l.add = "ccc"
    print("修改后的实例变量的值")
    print(l.name)
    print(l.add)
    print("修改后的类变量的值")
    print(Language.name)
    print(Language.add)

输出:

image.png

二、实例变量

class Language:
    def __init__(self):
        self.name = "Python"
        self.add = "http//www.baidu.com"

    def test(self):
        self.content = "aaa"

如上所示:

name,add,content都是属于实例变量,****init****() 函数在创建类对象时会自动调用,而test()方法在无法自动调用,需要手动调用,所以在调用以上实例变量时,name和add可以通过类对象直接调用,而content需要调用test()函数才能调用。

实例变量调用

class Language:
    def __init__(self):
        self.name = "Python"
        self.add = "http//www.baidu.com"

    def test(self):
        self.content = "aaa"

if __name__ == '__main__':
    l = Language()
    print(l.name)
    print(l.add)
    # 无法直接调用content,会报错
    # print(l.content)

输出:

image.png
class Language:
    def __init__(self):
        self.name = "Python"
        self.add = "http//www.baidu.com"

    def test(self):
        self.content = "aaa"

if __name__ == '__main__':
    l = Language()
    print(l.name)
    print(l.add)
    l.test()
    print(l.content)

输出:

image.png

修改实例变量

通过类对象来修改实例变量的值,不会改变原来的实例变量的值,而是给它定义新的变量,重新赋值

class Language:
    def __init__(self):
        self.name = "Python"
        self.add = "http//www.baidu.com"

    def test(self):
        self.content = "aaa"

if __name__ == '__main__':
    l1 = Language()
    l1.name = "C++"
    l1.add = "hhh"
    print(l1.name)
    print(l1.add)
    l2 = Language()
    print(l2.name)
    print(l2.add)

输出:

image.png

注意:

类变量可以与实例变量同名,但类对象在调用变量时会先选择实例变量,所以这边不推荐使用类对象来调用类变量

class Language:
    name = "Java"
    add = "aaa"

    def __init__(self):
        self.name = "Python"
        self.add = "http//www.baidu.com"

    def test(self):
        self.content = "aaa"

if __name__ == '__main__':
    l1 = Language()
    print(l1.name)
    print(l1.add)

输出:

image.png

三、局部变量

局部变量是作用与类内部的,直接以“变量名=值”的方式进行定义,局部变量只能用于所在函数中,函数执行完成后,局部变量也会被销毁。

class Language:

    def test(self, count):
        content = count * 8
        print(content)

if __name__ == '__main__':
    l = Language()
    l.test(5)

--输出
40

相关文章

网友评论

      本文标题:python3-面向对象之类变量、实例变量和局部变量

      本文链接:https://www.haomeiwen.com/subject/ougumltx.html