| ▲ | tremon 2 days ago | ||||||||||||||||||||||
> consider an expression like '"pop" in dir(mySet)'
I don't see why hasattr(mySet, 'pop') should be a problem here? | |||||||||||||||||||||||
| ▲ | chriswarbo 2 days ago | parent [-] | ||||||||||||||||||||||
> I don't see why hasattr(mySet, 'pop') should be a problem here? I never said it's a problem (and I never said it's not!). I was specifically addressing two things: - The "theoretical" nature of the question I quoted (i.e. ignoring other aspects like subjectivity, practicality, convention, etc.) - The reasoning about "Liskov violation", which was quoted further up this thread. For context, here's Liskov's definition of their principle (from https://en.wikipedia.org/wiki/Liskov_substitution_principle ): > Barbara Liskov and Jeannette Wing described the principle succinctly in a 1994 paper as follows:[1] > > Subtype Requirement: Let ϕ(x) be a property provable about objects x of type T. Then ϕ(y) should be true for objects y of type S where S is a subtype of T. My expression `"pop" in dir(mySet)` gives an explicit example of how `set` and `frozenset` are not subtypes of each other (regardless of how they're encoded in the language, with "subclasses" or whatever). In this case `ϕ(x)` would be a property like `'"pop" in dir(x)' = 'False'`, which holds for objects x of type frozenset. Yet it does not hold for objects y of type set. Your example of `hasattr(mySet, 'pop')` gives another property that would be violated. My point is that avoiding "Liskov violations" is ("theoretically") impossible, especially in Python (which allows programs to introspect/reflect on values, using facilities like 'dir', 'hasattr', etc.). (FYI I became rather jaded on the Liskov substitution principle after reading https://okmij.org/ftp/Computation/Subtyping ) | |||||||||||||||||||||||
| |||||||||||||||||||||||