Here goes,
I have a base class that is the following :
class primitive:
def __init__(self):
self.name = ""
self.transforms = []
def copyInternalState(self, sourceObj, copyName):
return null
def copy(self, copyName):
# copy the source object internal state
primitiveCopy = self.copyInternalState(self, copyName)
# copy the transformations
primitiveCopy.transforms = []
if self.transforms != []:
for transf in self.transforms:
primitiveCopy.transforms.append(transf.copy())
return primitiveCopy
# more methods. the ones listed should be enough to get the picture
And a derived class,
class CircularCilinder(primitive):
def __init__(self, name):
self.name = name
self.baseCenterVertex = [0, 0, 0]
self.heightVertex = [0, 1, 0]
self.radius = 1
def copyInternalState(self, sourceObj, copyName):
copy = CircularCilinder(copyName)
copy.setHeight(self.heightVertex[1])
copy.setRadius(self.radius)
return copy
I then have a script that creates a CircularCilinder,
cilinder = CircularCilinder("cilinder")
cilinderCopy = cilinder.copy("cilinderCopy")
when I run this script I get the error,
Traceback (most recent call last):
File "./testscript.py", line 26, in <module>
cilinderCopy = cilinder.copy("cilinderCopy")
File "/cygdrive/d/cg/brlcad_api/trunk/src/ds_brlcad_modeler/api/primitive.py",
line 64, in copy
if self.transforms != []:
AttributeError: CircularCilinder instance has no attribute 'transforms'
the transforms instance attribute is not known in the derived class. But I
wanted to avoid adding a self.transforms = [] line to the derived class
__init__ method. That attribute is only to be known by the superclass.
Is there a way to do this ?
Cheers,
Chris
--
http://blog.rebertia.com
Hello,
I have an object definition :
class primitive:
    def __init__(self)
        self.name = ""
        self.transforms = []
    def copy(self, copyName)
        copy = self.copyInternalState(copyName)  # method defined elsewhere
in derived class
        if self.transforms != []
            for transf in self.transforms
                copy.transforms.append(transf.copy())
In short, what I want to is to have the transforms list as an instance
attribute of the class. I will add objects to it. When I call the copy
method on the object the list is to be copied to the new object.
Problem is that the python interpreter is complaining that it doesn't
know any self.transforms in the if statement.
Help
1. Always post the actual code - the code you posted is not valid
Python as many colons

) are missing.
2. You appear to be attempting to use the same name (copy) both as a
method name AND as a local variable of that method. Â This definitely
look wrong.
Perhaps if you could post the actual offending code (the smallest
example showing the problem you observe) others might be able to help
you.
The full, exact error message and exception traceback would also be helpful.
Cheers,
Chris