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