diff --git a/builtin/builtin.go b/builtin/builtin.go index af47833f..a984928a 100644 --- a/builtin/builtin.go +++ b/builtin/builtin.go @@ -29,7 +29,7 @@ func init() { // py.MustNewMethod("callable", builtin_callable, 0, callable_doc), py.MustNewMethod("chr", builtin_chr, 0, chr_doc), py.MustNewMethod("compile", builtin_compile, 0, compile_doc), - // py.MustNewMethod("delattr", builtin_delattr, 0, delattr_doc), + py.MustNewMethod("delattr", builtin_delattr, 0, delattr_doc), // py.MustNewMethod("dir", builtin_dir, 0, dir_doc), py.MustNewMethod("divmod", builtin_divmod, 0, divmod_doc), py.MustNewMethod("eval", py.InternalMethodEval, 0, eval_doc), @@ -633,6 +633,27 @@ func source_as_string(cmd py.Object, funcname, what string /*, PyCompilerFlags * // return nil; } +const delattr_doc = `Deletes the named attribute from the given object. + +delattr(x, 'y') is equivalent to "del x.y" +` + +func builtin_delattr(self py.Object, args py.Tuple) (py.Object, error) { + var v py.Object + var name py.Object + + err := py.UnpackTuple(args, nil, "delattr", 2, 2, &v, &name) + if err != nil { + return nil, err + } + + err = py.DeleteAttr(v, name) + if err != nil { + return nil, err + } + return py.None, nil +} + const compile_doc = `compile(source, filename, mode[, flags[, dont_inherit]]) -> code object Compile the source string (a Python module, statement or expression) diff --git a/builtin/tests/builtin.py b/builtin/tests/builtin.py index ac3f7dc1..1349c891 100644 --- a/builtin/tests/builtin.py +++ b/builtin/tests/builtin.py @@ -300,6 +300,15 @@ class C: pass setattr(c, "potato", "spud") assert getattr(c, "potato") == "spud" assert c.potato == "spud" +delattr(c, "potato") +assert not hasattr(c, "potato") +ok = False +try: + delattr(c, "potato") +except AttributeError as e: + ok = True +finally: + assert ok doc="sum" assert sum([1,2,3]) == 6
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: