[x3d-public] x3d.py problem
vmarchetti at kshell.com
vmarchetti at kshell.com
Tue May 12 18:25:56 PDT 2020
This is an unfortunate and common bug that occurs in Python.
In the definition of the class Scene (around line 8795 of x3d.py) is this definition of the __init__ function for Scene:
def __init__(self, children=list()):
self.children = children
This code is read once when the x3d.py module is loaded, and it creates a class-level default value for the children argument.
If you ever use the default value by calling Scene() {with no parameter}, this class-level instance of list is modified, and this SAME INSTANCE of list
if used for any further calls of Scene()
The way to avoid this is to define the __init__ function this way:
def __init__(self, children=None):
if children is None:
self.children = list() # creates a new empty list for each Scene instance
else:
self.children = children
Vince Marchetti
> On May 12, 2020, at 5:59 PM, Andreas Plesch <andreasplesch at gmail.com> wrote:
>
> I discovered a simple workaround. Always pass a children parameter, even if empty.
>
> On Tue, May 12, 2020 at 5:16 PM Andreas Plesch <andreasplesch at gmail.com <mailto:andreasplesch at gmail.com>> wrote:
> Hi,
>
> after some debugging I discovered another issue with x3d.py. It can be boiled down t o a few lines of code:
>
> import x3d.x3d as x
>
> my_scene = x.Scene()
> group = x.Group()
> my_scene.children.append(group)
> print(my_scene.XML())
>
> => output
> => <Scene>
> => <Group/>
> => </Scene>
>
> my_other_scene = x.Scene()
> print(my_other_scene.XML())
>
> => output
> => <Scene>
> => <Group/>
> => </Scene>
>
> I think my_other_scene should be empty but remembers the content of the first scene.
> Can you reproduce that ?
> On the other hand this works (in a new session):
>
> my_scene = x.Scene( children = [x.Group()] )
> print(my_scene.XML())
>
> => output
> => <Scene>
> => <Group/>
> => </Scene>
>
> my_other_scene = x.Scene()
> print(my_other_scene.XML())
>
> => output
> => <Scene>
> => </Scene>
>
> --
> Andreas Plesch
> Waltham, MA 02453
>
>
> --
> Andreas Plesch
> Waltham, MA 02453
> _______________________________________________
> x3d-public mailing list
> x3d-public at web3d.org
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20200512/dcb24285/attachment-0001.html>
More information about the x3d-public
mailing list