Reputation: 11
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
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
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
Reputation: 29089
Some key differences
list
is built-in in python. Just do x = [1, 2, 3]
_
, but nothing can stop others from accessing them.this
everywhere. this
is commonly called self
in pythonstatic
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
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