Thrift library python classes should be new-style classes
---------------------------------------------------------

                 Key: THRIFT-1088
                 URL: https://issues.apache.org/jira/browse/THRIFT-1088
             Project: Thrift
          Issue Type: Improvement
          Components: Python - Library
    Affects Versions: 0.6
            Reporter: Will Pierce
            Priority: Minor


The included python thrift library classes (TType, TProtocolBase, etc...) are 
all defined using old-style python class definitions.  This makes it somewhat 
more difficult to dynamically deal with instances of those classes at runtime, 
since the type() builtin doesn't return the class name.  I don't think there's 
really any good reason for avoiding using new style classes.  The typical 
fear/uncertainty/doubt with new-style classes (since 2001 when they were made 
available in python 2.2) is that they are thought to be slower than old-style 
classes.  I personally haven't ever found the performance difference between 
old and new style classes to 

Unless there's a compelling reason that Thrift developers want to use old-style 
classes, I think it's a more programmer-friendly choice to switch these to 
new-style classes.  Not to mention the benefits that new style classes provide, 
see: 
http://realmike.org/blog/2010/07/18/introduction-to-new-style-classes-in-python/
 


The following thrift classes don't inherit from the 'object' class, so are 
old-style classes:
{noformat}
% find . -name \*py | xargs grep class | grep -v [.]svn | grep '[a-zA-Z0-9]:$'
./src/protocol/TCompactProtocol.py:class CompactType:
./src/protocol/TCompactProtocol.py:class TCompactProtocolFactory:
./src/protocol/TProtocol.py:class TProtocolBase:
./src/protocol/TProtocol.py:class TProtocolFactory:
./src/protocol/TBinaryProtocol.py:class TBinaryProtocolFactory:
./src/protocol/TBinaryProtocol.py:class TBinaryProtocolAcceleratedFactory:
./src/Thrift.py:class TType:
./src/Thrift.py:class TMessageType:
./src/Thrift.py:class TProcessor:
./src/server/TServer.py:class TServer:
./src/server/TNonblockingServer.py:class Connection:
./src/server/TNonblockingServer.py:class TNonblockingServer:
./src/transport/TTransport.py:class TTransportBase:
./src/transport/TTransport.py:class CReadableTransport:
./src/transport/TTransport.py:class TServerTransportBase:
./src/transport/TTransport.py:class TTransportFactoryBase:
./src/transport/TTransport.py:class TBufferedTransportFactory:
./src/transport/TTransport.py:class TFramedTransportFactory:
{noformat}

I'll make changes to my local copy of trunk, run the tests and then attach a 
patch to this ticket for evaluation.

Unless anyone has objections or concerns about switching to new style classes?


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to