I'm a Java programmer for the most part. I'm very familiar with the Python syntax, but I've never used it for big projects. When I started a larger project in python, I found myself confused about where to start in the design process.
I think the biggest issue I encountered coming from Java is that I'm used to the idea of an "interface" (For those not familiar, it's basically a design-by-contract way of doing multiple inheritance, defining a bunch of methods that the class that implements it will include). Certain classes in python "expect" their arguments to have certain methods. Since I'm not designing by contract, how do I define what methods these are? I don't even know how to conceptualize what these methods are. I'm so used to defining an interface for a class and not worrying about which one of those functions/methods the function/method will call.
Another issue I'm having is instance variables. Should I be defining those in my design, even though you can just change them on the fly?
I guess my problem is that I'm so used to the static nature of the code reflecting the static nature of the design, but since the structure of the code can basically change on the fly, I start to wonder whether the design should reflect that somehow.