class Investor:
def __init__(self, profile):
self.profile = profile
def __getitem__(self, item):
return self.profile[item]
可以简单地通过Investor['name']
访问投资者资料,
但是当我使用get()
Investor.get('name')
已筹集:AttributeError: 'Investor' object has no attribute 'get'
我知道可以通过在投资人类别中添加get()
方法来解决此问题,但这是正确的方法吗?还是有其他特殊方法__get__
或其他什么方法?
答案 0 :(得分:4)
标准get也具有默认值。所以这将是完整版本:
def get(self, item, default=None):
return self.profile.get(item, default=default)
就此而言,就我所知,没有任何更好的方法,因此默认情况下为
。答案 1 :(得分:3)
为什么不只定义一个get
函数?
def get(self, item):
return self.profile.get(item)
答案 2 :(得分:2)
如前所述,尚不存在特殊的“获取”函数,您可以从对象类继承。要获得所需的功能,您需要实现自己的“获取”功能。
如果您实际上想创建很多类似于Investor的类,并且都具有get()函数,那么您应该创建一个超类供Investor继承。
class Person(object):
def __init__(self, profile):
self.profile = profile
def get(self, item):
if item in self.profile:
return self.profile[item]
class Investor(Person):
def __init__(self, profile):
super().__init__(profile)
答案 3 :(得分:0)
使用@property怎么样?
class Investor:
def __init__(self, profile):
self._profile = profile
@property
def profile(self):
return self._profile
if __name__ == "__main__":
inv = Investor(profile="x")
print(inv.profile)
礼物:
x
答案 4 :(得分:0)
最简单的解决方案是在try:#code except: #code
方法中使用__getitem__
块。例如:
class Investor:
def __init__(self, profile):
self.profile = profile
def __getitem__(self, item):
try:
return self.profile[item]
except:
return 0
`
这将帮助您获取功能类似的字典get()方法,而不必添加新的get()方法。
答案 5 :(得分:0)
假设您有一个investor_object
,例如:
investor_object = Investor({'name': 'Bob', 'age': 21})
您可以执行以下任一操作:
investor_object.profile['name']
或
investor_object.profile.get('name')
礼物:
Bob