dude_98
dude_98

Reputation: 11

Convert from Java to Python

I am new to python and I'm wondering how one would go around to convert a piece of code in this case Java to python. For instance if a public class Example is a class which consists of multiple functions for instance:

File 1:

public class Example{
    private ArrayList<Something> somethings;
    private boolean test;

    foo(){
            test= false;
            somethings = new ArrayList<>();
        }

.
.
.

File 2:

class Something{
    private Example another;
    private String whatever;

    Something(String a, Node another){
        this.another = another ;
        this.whatever = whatever;
    }

.
.
.

In python what is the equivalent of import java.util.ArrayList; and how would one go about it to call another class?

Will this be some sort of the above's equivalent in python? How would I go about linking the 2 classes together in python?

class Example():
    def __init__(self):
        self.test= False
        self.somethings= []

.
.
.

class Something:
    def __init__(self, another, whatever):
        self.another = another 
        self.whatever = whatever 
.
.
.

Thanks in advance

EDIT 1: My questions mainly are If the implementation of that piece of code are correct and how to call a class within a class in python

EDIT 2:Thanks for everyone who answered so far. Just to clarify with one more thing if I had something like which is in class Example:

void exampleSomething(Example exampleb, String a){
        somethings.add(new Something(a, another));
    }

in python would this be the following:

def exampleSomething(another, a):
    self.somethings.append(a, another)

Thanks once again

Upvotes: 1

Views: 12188

Answers (4)

Darshanlal
Darshanlal

Reputation: 19

import java.util.Random;

/**
 *
 * @author Vijini
 */

//Main class
public class SimpleDemoGA {

    Population population = new Population();
    Individual fittest;
    Individual secondFittest;
    int generationCount = 0;

    public static void main(String[] args) {

        Random rn = new Random();

        SimpleDemoGA demo = new SimpleDemoGA();

        //Initialize population
        demo.population.initializePopulation(10);

        //Calculate fitness of each individual
        demo.population.calculateFitness();

        System.out.println("Generation: " + demo.generationCount + " Fittest: " + demo.population.fittest);

        //While population gets an individual with maximum fitness
        while (demo.population.fittest < 5) {
            ++demo.generationCount;

            //Do selection
            demo.selection();

            //Do crossover
            demo.crossover();

            //Do mutation under a random probability
            if (rn.nextInt()%7 < 5) {
                demo.mutation();
            }

            //Add fittest offspring to population
            demo.addFittestOffspring();

            //Calculate new fitness value
            demo.population.calculateFitness();

            System.out.println("Generation: " + demo.generationCount + " Fittest: " + demo.population.fittest);
        }

        System.out.println("\nSolution found in generation " + demo.generationCount);
        System.out.println("Fitness: "+demo.population.getFittest().fitness);
        System.out.print("Genes: ");
        for (int i = 0; i < 5; i++) {
            System.out.print(demo.population.getFittest().genes[i]);
        }

        System.out.println("");

    }

    //Selection
    void selection() {

        //Select the most fittest individual
        fittest = population.getFittest();

        //Select the second most fittest individual
        secondFittest = population.getSecondFittest();
    }

    //Crossover
    void crossover() {
        Random rn = new Random();

        //Select a random crossover point
        int crossOverPoint = rn.nextInt(population.individuals[0].geneLength);

        //Swap values among parents
        for (int i = 0; i < crossOverPoint; i++) {
            int temp = fittest.genes[i];
            fittest.genes[i] = secondFittest.genes[i];
            secondFittest.genes[i] = temp;

        }

    }

    //Mutation
    void mutation() {
        Random rn = new Random();

        //Select a random mutation point
        int mutationPoint = rn.nextInt(population.individuals[0].geneLength);

        //Flip values at the mutation point
        if (fittest.genes[mutationPoint] == 0) {
            fittest.genes[mutationPoint] = 1;
        } else {
            fittest.genes[mutationPoint] = 0;
        }

        mutationPoint = rn.nextInt(population.individuals[0].geneLength);

        if (secondFittest.genes[mutationPoint] == 0) {
            secondFittest.genes[mutationPoint] = 1;
        } else {
            secondFittest.genes[mutationPoint] = 0;
        }
    }

    //Get fittest offspring
    Individual getFittestOffspring() {
        if (fittest.fitness > secondFittest.fitness) {
            return fittest;
        }
        return secondFittest;
    }


    //Replace least fittest individual from most fittest offspring
    void addFittestOffspring() {

        //Update fitness values of offspring
        fittest.calcFitness();
        secondFittest.calcFitness();

        //Get index of least fit individual
        int leastFittestIndex = population.getLeastFittestIndex();

        //Replace least fittest individual from most fittest offspring
        population.individuals[leastFittestIndex] = getFittestOffspring();
    }

}


//Individual class
class Individual {

    int fitness = 0;
    int[] genes = new int[5];
    int geneLength = 5;

    public Individual() {
        Random rn = new Random();

        //Set genes randomly for each individual
        for (int i = 0; i < genes.length; i++) {
            genes[i] = Math.abs(rn.nextInt() % 2);
        }

        fitness = 0;
    }

    //Calculate fitness
    public void calcFitness() {

        fitness = 0;
        for (int i = 0; i < 5; i++) {
            if (genes[i] == 1) {
                ++fitness;
            }
        }
    }

}

//Population class
class Population {

    int popSize = 10;
    Individual[] individuals = new Individual[10];
    int fittest = 0;

    //Initialize population
    public void initializePopulation(int size) {
        for (int i = 0; i < individuals.length; i++) {
            individuals[i] = new Individual();
        }
    }

    //Get the fittest individual
    public Individual getFittest() {
        int maxFit = Integer.MIN_VALUE;
        int maxFitIndex = 0;
        for (int i = 0; i < individuals.length; i++) {
            if (maxFit <= individuals[i].fitness) {
                maxFit = individuals[i].fitness;
                maxFitIndex = i;
            }
        }
        fittest = individuals[maxFitIndex].fitness;
        return individuals[maxFitIndex];
    }

    //Get the second most fittest individual
    public Individual getSecondFittest() {
        int maxFit1 = 0;
        int maxFit2 = 0;
        for (int i = 0; i < individuals.length; i++) {
            if (individuals[i].fitness > individuals[maxFit1].fitness) {
                maxFit2 = maxFit1;
                maxFit1 = i;
            } else if (individuals[i].fitness > individuals[maxFit2].fitness) {
                maxFit2 = i;
            }
        }
        return individuals[maxFit2];
    }

    //Get index of least fittest individual
    public int getLeastFittestIndex() {
        int minFitVal = Integer.MAX_VALUE;
        int minFitIndex = 0;
        for (int i = 0; i < individuals.length; i++) {
            if (minFitVal >= individuals[i].fitness) {
                minFitVal = individuals[i].fitness;
                minFitIndex = i;
            }
        }
        return minFitIndex;
    }

    //Calculate fitness of each individual
    public void calculateFitness() {

        for (int i = 0; i < individuals.length; i++) {
            individuals[i].calcFitness();
        }
        getFittest();
    }
}

Upvotes: 1

rdas
rdas

Reputation: 21285

Let's see:

class Example():
    def __init__(self):
        self.test= False
        self.somethings= []

.
.
.

class Something:
    def __init__(self, another, whatever):
        self.another = another 
        self.whatever = whatever 
.
.
.

Should be fine. But all your class members are public. Let's make them private:

class Example():
    def __init__(self):
        self._test= False
        self._somethings= []

.
.
.

class Something:
    def __init__(self, another, whatever):
        self._another = another 
        self._whatever = whatever 
.
.
.

To add getters and setters checkout the @property decorator: https://www.programiz.com/python-programming/methods/built-in/property

Now, do you want types? In python 3+ you can have types: https://docs.python.org/3/library/typing.html

class Example():
    def __init__(self):
        self._test= False
        self._somethings= []

.
.
.

class Something:
    def __init__(self, another -> str, whatever -> Node):
        self._another = another 
        self._whatever = whatever 
.
.
.

And ArrayList becomes just list() - a builtin type that's available everywhere.

Upvotes: 0

blue note
blue note

Reputation: 29089

Some key differences

  • list is built-in in python. Just do x = [1, 2, 3]
  • there is no private. By convention, you prefix your "private" variable name by _, but nothing can stop others from accessing them.
  • inside the class, you have to use this everywhere. this is commonly called self in python
  • declaring your variables inside the class body (outside methods) makes them class variables, not instance variables (something like static in java)

Objects are called just like in java. When you have a reference to obj in another class, just call obj.f(x)

Upvotes: 4

olirwin
olirwin

Reputation: 605

To import a class in Python, if the class is to be in a separate file, just use :

import fileName

at the beginning of you second file

In your case, you would :

import example

Upvotes: 0

Related Questions