On 3/26/23 13:43, Jen Kris wrote:

My question is:  what makes "choose_method" a method of the base class, called 
as self.choose_method instead of UrnaryConstraint.choose_method?  Is it 
super(UrnaryConstraint, self).__init__(strength) or just the fact that Constraint is its 
base class?



When referring to "self" you are referring to an "instance" of the class or classes, think in terms of objects (the instance, usually self) vs a blueprint (the class, usually cls).

saying self.choose_method(mark) checks the "instance" of self to see if it has something called choose_method at run time (instances being created at run time). If you have an instance of just Constraint, and never had a choose_method defined for it, you will get an error because it can't find it (which in this case is presumed as designed). If the "instance" is of a subclass of Constraint that does have a choose_method, that also inherits the stuff from Constraint, it will successfully call it against the "instance" that has been constructed with attributes of both classes.

if the instance of a subclass has a definition for something that is in the base class, for instance IF UrnaryConstraint had it's own def satisfy() method, the instance would call the subclass version. In the case given, it does not, so it looks to the parent to see if it has inherited satisfy() from higher up.

Hopefully that helps a little bit.. just have to get a feel for OO instantiated object vs class..
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to