Python中的对象什么时候用.取属性,什么时候用[]取属性?

Python中的对象什么时候用.取属性,什么时候用[]取属性?

问题描述

为什么tkinter中,button的text属性只能通过button["text"]访问,而自定义的test实例却只能通过test.age访问呢

相关代码

from tkinter import *

root = Tk()

button = Button(root, text="click me")

print(button.text)#'Button' object has no attribute 'text'

print(button["text"])#click me

class Test():

age = 18

test = Test()

print(test.age)#18

print(test["age"])#'Test' object is not subscriptable

期望目标

如果想让Test类生成的实例也能通过test["age"]的方式访问,应该怎么做呢?我试了下让Test继承dict是可以的,但是我看Button类并没有继承dict


回答:

严格来说button['text']不是访问对象属性而是根据索引读取数据集合中的值,自定义类中使用这种方式读写对象属性可以这么做:

class Test():  

age = 18

def __getitem__(self, item):

return getattr(self,item)

def __setitem__(self, key, value):

setattr(self,key,value)

test = Test()

test["age"] = 88

print(test.age)#88

print(test["age"])#88

以上是 Python中的对象什么时候用.取属性,什么时候用[]取属性? 的全部内容, 来源链接: utcz.com/p/937735.html

回到顶部