python类属性和global变量区别

文章讨论了Python中数据成员的分类,包括类属性(如`MyClass.c`)和实例属性(如`ww.call_my_function()`中的`qw`)。指出类方法外部的变量若未使用`global`声明,则默认为类属性,导致`NameError`或`AttributeError`。还提到在未定义类时,无需显式声明全局变量。
摘要由CSDN通过智能技术生成

数据成员是指在类中定义的变量,即属性,根据定义位置,又可以分为类属性和实例属性。
类属性定义在方法前面。

定义类属性,非全局变量

class MyClass:
    #global c
    c = 10   ## 类属性
    def my_function(self):
        global qw
        qw = 9
        print('this is my function')
    def call_my_function(self):
        global qw,c
        print('calling my function')
        self.my_function()
        p=5
        print(p)
        MyClass.y = 6
        print(MyClass.y)
        print(qw)
        print(MyClass.c) ##能输出
        print(c)  ## 未定义

ww = MyClass()
ww.call_my_function()

输出结果:
在这里插入图片描述NameError: name ‘c’ is not defined

定义全局变量,非类属性

class MyClass:
    global c
    c = 10
    def my_function(self):
        global qw
        qw = 9
        print('this is my function')
    def call_my_function(self):
        global qw,c
        print('calling my function')
        self.my_function()
        p=5
        print(p)
        MyClass.y = 6
        print(MyClass.y)
        print(qw)
        print(c)
        print(MyClass.c)
        

ww = MyClass()
ww.call_my_function()

报错:
在这里插入图片描述

AttributeError: type object ‘MyClass’ has no attribute ‘c’

因此,变量在类方法外面,要么为类属性,要么为全局变量。如果在方法外面未通过global声明为全局变量,则自动变为类属性

如下,b为类属性
在这里插入图片描述

未定义类时,则不需要在方法外面通过gobal显式定义变量

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值