student_courses = Relationship()
So you can examine the relationship you are interested in by finding it in the repository for relationships (eg. in a folder) as:
<relationshipfolder>.student_courses <relationshipfolder>.course_teachers
Well, the above code doesn't create that attribute...
Indeed, written out properly it would be something like: student_courses = Relationship() <relationshipfolder>._setObject('student_courses', student_courses)
The above code also is bad because it allows anybody to kill all stored relations by just creating a new Relations object and assigning that to the object attribute.
Then don't do that ..
It's then better to have an API more like
<storage>.addRelation(relid, objecta, objectb)
You could still delete the storage if you wanted to kill all stored relations, couldn't you?
class course: def __init__(self): relstorage = GetRelationshipStorage() relstorage.CreateRelationship('students')
def assignStudent(self, student): relstorage = GetRelationshipStorage() relstorage.addRelationship('students', self, student)
According to the proposal, you first create a relationship, and then you add a view of that relationship (either a ComputedAttribute or a descriptor) to your class, if you want to access the relationship as an attribute on your class. If the relationship repository is not global, the view would have to acquire it. -- Jean Jordaan http://www.upfrontsystems.co.za