Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDILab开源决策智能平台
treevalue
提交
2e6ab85e
T
treevalue
项目概览
OpenDILab开源决策智能平台
/
treevalue
10 个月 前同步成功
通知
3
Star
213
Fork
3
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
treevalue
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
2e6ab85e
编写于
11月 30, 2021
作者:
HansBug
😆
1
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dev(hansbug): optimize for TreeValue's getattr
上级
383c2b65
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
7 deletion
+36
-7
treevalue/tree/tree/tree.pyx
treevalue/tree/tree/tree.pyx
+36
-7
未找到文件。
treevalue/tree/tree/tree.pyx
浏览文件 @
2e6ab85e
...
...
@@ -27,6 +27,8 @@ cdef inline TreeStorage _dict_unpack(dict d):
return
create_storage
(
result
)
_DEFAULT_STORAGE
=
create_storage
({})
cdef
class
TreeValue
:
r
"""
Overview:
...
...
@@ -36,6 +38,10 @@ cdef class TreeValue:
The `TreeValue` class is a light-weight framework just for DIY.
"""
def
__cinit__
(
self
,
object
data
):
self
.
_st
=
_DEFAULT_STORAGE
self
.
_type
=
type
(
self
)
@
cython
.
binding
(
True
)
def
__init__
(
self
,
object
data
):
"""
...
...
@@ -66,8 +72,6 @@ cdef class TreeValue:
"Unknown initialization type for tree value - {type}."
.
format
(
type
=
repr
(
type
(
data
).
__name__
)))
self
.
_type
=
type
(
self
)
def
__getnewargs_ex__
(
self
):
# for __cinit__, when pickle.loads
return
({},),
{}
...
...
@@ -125,8 +129,31 @@ cdef class TreeValue:
"""
raise
AttributeError
(
"Attribute {key} not found."
.
format
(
key
=
repr
(
key
)))
# @cython.binding(True)
# def __getattr__(self, str item):
# """
# Overview:
# Get item from this tree value.
#
# Arguments:
# - key (:obj:`str`): Attribute name.
#
# Returns:
# - attr (:obj:): Target attribute value.
#
# Example:
# >>> t = TreeValue({'a': 1, 'b': 2, 'x': {'c': 3, 'd': 4}})
# >>> t.a # 1
# >>> t.b # 2
# >>> t.x.c # 3
# """
# try:
# return self._unraw(self._st.get(item))
# except KeyError:
# return self._attr_extern(item)
@
cython
.
binding
(
True
)
def
__getattr__
(
self
,
str
item
):
def
__getattr
ibute
__
(
self
,
str
item
):
"""
Overview:
Get item from this tree value.
...
...
@@ -143,10 +170,13 @@ cdef class TreeValue:
>>> t.b # 2
>>> t.x.c # 3
"""
try
:
if
self
.
_st
.
contains
(
item
)
:
return
self
.
_unraw
(
self
.
_st
.
get
(
item
))
except
KeyError
:
return
self
.
_attr_extern
(
item
)
else
:
try
:
return
object
.
__getattribute__
(
self
,
item
)
except
AttributeError
:
return
self
.
_attr_extern
(
item
)
@
cython
.
binding
(
True
)
def
__setattr__
(
self
,
str
key
,
object
value
):
...
...
@@ -341,7 +371,6 @@ cdef class TreeValue:
>>> pickle.loads(bin_) # TreeValue({'a': 1, 'b': 2, 'x': {'c': 3}})
"""
self
.
_st
=
state
self
.
_type
=
type
(
self
)
@
cython
.
binding
(
True
)
def
__getstate__
(
self
):
...
...
HansBug
😆
@HansBug
mentioned in commit
583b4b1a
·
12月 01, 2021
mentioned in commit
583b4b1a
mentioned in commit 583b4b1a6ea6768c0146ea2b7aed67810c23a84f
开关提交列表
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录