python面向对象类属性_python 面向对象与类及类属性

在 python 中,无论是类变量还是类方法都是类的属性,每一个类属性都必须绑定到一个类实例或类本身上

绑定到类实例的属性就是类成员属性,绑定到类本身的属性就是类静态属性

类数据属性

类中直接定义的数据属性是绑定到类的,python 中你并不需要在他前面加 static 关键字(事实上,目前为止 python 中并没有一个 static 关键字)

而绑定到实例的类成员变量与类静态变量即使是同名的,也并不会造成冲突,而类成员变量在使用前并不需要提前声明,可以直接设置值并调用

但如果类成员方法试图访问不存在类成员变量,则会继续寻找是否存在同名的类静态变量来使用

如果最终无法找到需要读取的变量,则会抛出异常:AttributeError: 'XXX' object has no attribute 'xxx'

示例

class Test:

str = 'static'

str2 = 'str2'

def setStr(self, i):

self.str = i

def getStr(self):

return self.str

def getStr2(self):

return self.str2

if __name__ == '__main__':

print(Test.str) # 访问类静态变量无需实例化类

test = Test() # 类实例化

test.setStr('local') # 设置类成员变量

print(Test.str) # 访问类静态变量(非类成员变量)

print(test.getStr()) # 访问类成员变量

print(test.getStr2()) # 测试需要访问的类成员变量不存在的情况

执行上述代码,打印出了:static

static

local

str2

可以看到,虽然类静态成员中拥有 str 变量,而类成员方法中试图修改 str 变量

但实际上,这两个 str 变量是不同,因为他们的绑定对象不同,分别绑定到类和实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值