我有这个数据类:
from dataclasses import dataclass, field
from typing import List
@dataclass
class Person:
name: str
dob: str
friends: List['Person'] = field(default_factory=list, init=False)
Run Code Online (Sandbox Code Playgroud)
name并且dob是不可变的并且friends是可变的。我想生成每个人对象的哈希值。我可以以某种方式指定要包含和排除哪个字段来生成__hash__ 方法吗?在这种情况下,name和dob应该包含在生成哈希中,但friends不应该包含。这是我的尝试,但没有成功
@dataclass
class Person:
name: str = field(hash=True)
dob: str = field(hash=True)
friends: List['Person'] = field(default_factory=list, init=False, hash=False)
Run Code Online (Sandbox Code Playgroud)
>>> hash(Person("Mike", "01/01/1900"))
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
hash(Person("Mike", "01/01/1900"))
TypeError: unhashable type: 'Person'
Run Code Online (Sandbox Code Playgroud)
我也找不到设置name和dob冻结的方法。仅仅从声音来看,我不会将其设置unsafe_hash为。 …
我有一张桌子EMPLOYEE(EMP_ID, EMP_NAME, DESC, SALARY),我想找回所有可以做魔术的员工.如果每个员工都存储在每个员工的每个DESC条目的末尾,那么能够执行魔术就被归类为人才和人才.
如果一个员工有任何才能,那么该DESC员工的最终结果就是'Talent: __talent_here__'.例如,乔擅长杂耍,然后他的描述就像是'Joe Doe, works here since 2011. Talent: juggling'.我可以假设,在每一个描述有字符串常量只有一个实例'Talent: ',人才总是存储在的结束DESC,而不是所有的员工都有人才.我还想对按名称检索的员工进行排序,我只想要前50个排序值
这是SELECT我目前正在发表的声明.
SELECT * FROM (
SELECT E.EMP_NAME FROM EMP E
WHERE INSTR(E.DESC, 'Talent: ') > 0
AND INSTR(SUBSTR(E.DESCRIPTION, INSTR(E.DESC, 'Talent: ')), 'magic') > 0
ORDER BY E.EMP_NAME ASC
) WHERE ROWNUM <= 50
/
Run Code Online (Sandbox Code Playgroud)
这个SELECT说法很好.现在我想在查询上创建索引以改善运行时间:
CREATE INDEX MAGICIANS ON EMP(
INSTR(DESCRIPTION, 'Talent: '),
INSTR(SUBSTR(DESCRIPTION, INSTR(DESCRIPTION, 'Talent: ')), 'magic')) …Run Code Online (Sandbox Code Playgroud)