anomaly

2015-05-10 Thread Mark Rosenblitt-Janssen
Here's something that might be wrong in Python (tried on v2.7):

>>> class int(str): pass

>>> int(3)
'3'

Mark
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: anomaly

2015-05-10 Thread Mark Rosenblitt-Janssen
Here's where this exploration came from.  I've (once again) been
contemplating the OO nature.

It's clear to me that there needs to be a distinction between
specialization of an object vs. expansion of an object (a new term I'm
proposing to the OOP lexicon).  The latter *adds* more functionality
(like what everyone does with the Object class), while the former
changes the behavior of some class for more specific behavior that was
not programmed in the original class.

It's a difference between, for example, concrete base types and ABCs.
Python artificially tried to make int inherit from object, just
because it can, but this is wrong.  It`s messed with the Zen-thing.
"Purity has hammered practicality [like the fact that we actually have
to work on concrete types in the CPU] into the ground. " (addition
mine).

Sorry I can't spend more time clarifying.  I hope that there's at
least one person who sees the issue.

Mark



On 5/10/15, Mark Rosenblitt-Janssen  wrote:
> Here's something that might be wrong in Python (tried on v2.7):
>
>>>> class int(str): pass
>
>>>> int(3)
> '3'
>
> Mark
>
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: anomaly

2015-05-10 Thread Mark Rosenblitt-Janssen
Along those lines, it makes no sense for mix-in classes to inherit
from Object at all -- they're neither expanding on object nor
specializing it.

For example, I'm refactoring my python Graph class so that people can
have different Vertex behaviors by using different composition of
mix-in classes.  But instead of letting them figure out the object
inheritence order (so there's no conflicts), I'm going to make some
classes that pre-specify the right ordering for different
combiniations of behaviors.

class Vertex(object):
"""Basic Vertex base class, giving a dictionary of edges.""""

class WVertex(Vertex, weighted_mixin):  #the weighted_mixin will
override some of the methods in Vertex.
"""Use this when initializing a Graph class for weighted edges."""

class RWVertex(WVertex, reverse_edge_mixin):
"""Use this class for O(1) access to the edges coming into Vertices."""

class Graph(dict):

def __init__(self, init={}, VertexType=Vertex):
"""Creates a Graph with the specified behaviors within VertexType."""

-
No one has to see the mix-in classes.

I'm inventing a new term for this kind of inheritence:  expansion.
I've enclosed one class inside of another, but yet it's not quite
"encapsulation" (in the C++ sense).

Cheers,

Mark J

http://wiki.hackerspaces.org/Hacking_with_the_Tao


On 5/10/15, Mark Rosenblitt-Janssen  wrote:
> Here's where this exploration came from.  I've (once again) been
> contemplating the OO nature.
>
> It's clear to me that there needs to be a distinction between
> specialization of an object vs. expansion of an object (a new term I'm
> proposing to the OOP lexicon).  The latter *adds* more functionality
> (like what everyone does with the Object class), while the former
> changes the behavior of some class for more specific behavior that was
> not programmed in the original class.
>
> It's a difference between, for example, concrete base types and ABCs.
> Python artificially tried to make int inherit from object, just
> because it can, but this is wrong.  It`s messed with the Zen-thing.
> "Purity has hammered practicality [like the fact that we actually have
> to work on concrete types in the CPU] into the ground. " (addition
> mine).
>
> Sorry I can't spend more time clarifying.  I hope that there's at
> least one person who sees the issue.
>
> Mark
>
>
>
> On 5/10/15, Mark Rosenblitt-Janssen  wrote:
>> Here's something that might be wrong in Python (tried on v2.7):
>>
>>>>> class int(str): pass
>>
>>>>> int(3)
>> '3'
>>
>> Mark
>>
>
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: anomaly

2015-05-10 Thread Mark Rosenblitt-Janssen
In case the example given at the start of the thread wasn't
interesting enough, it also works in the other direction:

>>> class str(int):  pass

>>> str('2')
2  #<- an integer!!!

Mark
-- 
https://mail.python.org/mailman/listinfo/python-list