如果我有课
class Kid():
def __init(name):
self.name = name
我应该添加什么才能做到这一点:
def is_cool(kid):
cool_kids = {"Jim","Bill","Nebuchadnezzar II"}
return kid in cool_kids
我必须从str继承Kid吗?
添加1:我知道我可以写return kid.name in cool_kids
,但是我正在为我的代码寻找一点语法糖。我想要一种在非常不同的对象集中检查obj的方法。
答案 0 :(得分:1)
您可以这样做:
class Kid:
def __init__(self, name):
self.name = name
def is_cool(kid):
cool_kids = {"Jim", "Bill", "Nebuchadnezzar II"}
return kid.name in cool_kids
print(is_cool(Kid("Daniel")))
print(is_cool(Kid("Jim")))
输出
False
True
您的代码有几个问题,您需要从Kid
类定义中删除括号,并将方法__init
更改为__init__
,并将self
作为第一个参数
更新
如果您想从str继承,您可以这样做:
class Kid(str):
def __new__(cls, *args, **kw):
return str.__new__(cls, *args, **kw)
def is_cool(kid):
cool_kids = {"Jim", "Bill", "Nebuchadnezzar II"}
return kid in cool_kids
print(is_cool(Kid("Daniel")))
print(is_cool(Kid("Jim")))
输出
False
True
您可以找到有关从str here继承的更多信息
答案 1 :(得分:1)
如何?
class Kid():
def __init__(self, name):
self.name = name
def __eq__(self, other):
return self.name == other
def __ne__(self, other):
return not self.name == other
def __hash__(self):
return hash(self.name)
def is_cool(kid):
cool_kids = {"Jim","Bill","Nebuchadnezzar II"}
return kid in cool_kids
if __name__ == "__main__":
print is_cool(Kid("Bob"))
print is_cool(Kid("Jim"))
print is_cool(Kid("Bill"))
结果:
False
True
True
您需要同时覆盖__eq__
和__hash__
,因为必须同时满足一个元素才能成为哈希表的成员。当Python评估元素是否为哈希表的成员时,它首先查看哈希是否匹配,如果匹配,则查看相等性。在此示例中,不必覆盖__ne__
,但是这样做是一个好习惯,因为您不希望等于和不等于不同步。
答案 2 :(得分:-1)
我怀疑以下内容会满足您的要求:
def is_cool(kid):
cool_kids = {"Jim","Bill","Nebuchadnezzar II"}
return kid.name in cool_kids