I started with ActionScript 2.0 and then went on with Java. I have learned, or at least used, a bunch of languages since then, including Python (probably my favorite).

I'm afraid that my style of object oriented programming is very unpythonic though, and more like Java OOP with Python syntax. What makes Java like and Pythonic OOP differ from each other? What things do Java programmers often do "unpythonically" when writing object oriented code in Python?

For a Java guy Python is an anarchic playgound where anyone can grab a club and start mauling your head.

For a Python guy Java is a an Orwellian universe where you are constantly shackled to someone else`s diminishing view of how the universe tick.

The truth is anything you can do in one language you can do in the other just as cleanly.  However as you have mentioned there are important difference in both community as to what clean means.

Java way :
A clean system is one that does what is meant to and nothing else, it will not allow extensions or modifications that go against the nature of the intended purpose and will attempt to enforce these as much as possible through the compiler.  Flexibility is obtained through careful crafting of simple interfaces within strict structures.  In Java one`s sand box should always be clearly bounded and overstepping these met with swift feedback from the compiler.  Java provides means to statically define object structures and create dynamic interactions from instances of them.  When I work in Java I try to cleverly create basic building blocks towards a brain dead solution.  I mostly work bottom-up once I have a working theory on how to tackle the problem.

Java will tend to produce large software that can span large teams and provides tools and means to keep the flock in check.  If kept unchecked this will lead to very detached teams working independently towards an ever more unclear goal.  Eventually each team becomes it`s own "raison d'être" and the system as a whole becomes diluted driving astray the main project.  These can lead to extreme cost overruns and huge software systems that perform and maintain poorly.

There is almost never a small quick and easy way to do things in Java, but the IDE and the tooling are there to make painful tasks a mere few clicks away.

Python way:
Clean means concise and easily readable.  A good python system is designed to let you get right to the heart of it and exposes it`s innermost secrets in a way that you can understand from the code the intended use and purpose of it.  It will also allow you to design your own solution around by extending and/or encapsulating the original design so that it will go exactly in your direction.  Python provides means to create object templates from which you can dynamically change the instance to fit the needs at hand.  In python I tend to tackle the problem right away and then spread the code in a logical structure such that the final solution remains as simple and readable as can be. In python I tend to work top-down and manage the increase complexities through a divide-and-conquer approach. 

Python teams will tend to produce light systems and be very fast in delivering a working solution.  They will tend to be a close knit bunch working interchangeably on any part of the system validating each other's solution every chance they get.  They feed on each other creating a synergy that is quite exhilarating.  However this creates teams that are difficult to scale to larger systems and often hit a sort of glass ceiling.  Introducing new members in the team will help but it will take some time for the knowledge to spread around enough for the extra productivity to be felt.  The team then becomes divided and the constant overview over the whole system dilutes as does the atmosphere of the early days.  This can lead to overly convoluted code to what once was a simple problem, extreme cost overruns and systems that perform and maintain poorly.

There is almost always a quick and easy way to do things with Python but complexity can be harder to keep in check once the system reach a certain threshold.

In short, both have a dark side and both have clear strength.  However, when prodding along both communities you will find that the strength of one leads to the dark side of the other and vice versa.

Hence the heated debates as to which is best.
