Im doing a project now and while i succeeded doing it another way, i wanted to try it with classes but i never finished any project with classes except for anything that you “learn”, i feel i forgot most things unless i really try them myself with my own ideas. I’ve cut it down to a basic level to learn and see what i am doing wrong.
class Eggmaster:
eggID = {
"0": "Organic Egg",
"1": "Free Range Egg",
"2": "Barn Egg",
"3": "Cage Egg",
}
def user_input():
egg = input("Enter the code on the egg: ")
return egg
# test out 1UK54321 or any code with 1-3 digits in the beginning
def __init__(self, egg):
self.egg = egg
def country(self, eggID):
print(eggID[self.egg[0]])
user_input()
I’m really confused to the point where im not knowing what im doing anymore. I got the challenge from this website: Egg Code Stamp Decoder | 101 Computing
do you see egg = input
should be ‘egg = user_input’
i don’t really understand that if i look at it.
I’d recommend using if
and elif
statements or a dictionary for parts of this.
For example, you could have a get_country
method:
def get_country(self):
code = self.egg[1:3]
countries = {
"UK": "United Kingdom",
"FR": "France",
"BE": "Belgium",
"DE": "Germany",
"ES": "Spain"
}
return countries[code]
And to test it, I would do the code written below outside the class
master = Eggmaster("1UK54321")
print(master.get_country())
You could even have a static method to create an egg object using user input.
class Eggmaster:
def __init__(self, egg):
self.egg = egg
@staticmethod
def create_from_user_input():
egg = input("Enter the code on the egg: ")
return Eggmaster(egg)
To test all of that together, I might do
master = Eggmaster.create_from_user_input()
print("Country of Origin:", master.get_country())
outside the class.
1 Like
i already solved this without classes but i wanna get my head around it.
class Eggmaster:
def __init__(self, egg):
self.egg = egg
def farming(self):
code_part_one = self.egg[0]
return code_part_one
def test(self):
eggID = {
"0": "Organic Egg",
"1": "Free Range Egg",
"2": "Barn Egg",
"3": "Cage Egg"
}
return eggID
def egg_code(self, eggID, code_part_one):
print(eggID[code_part_one])
master = Eggmaster("1UK54321")
print(master.farming())
Why is this not working?!
It looks like you spread the getting the part_one
stuff over multiple functions (methods of an Eggmaster
object)
Your .farming
method only returns the first character in the .egg
string.
Nothing else happens in that function (from the code you have above).
You could call the other methods you have inside the .farming
method to make things work the way you want.
def farming(self):
code_part_one = self.egg[0]
eggID = self.test()
return self.egg_code(eggID, code_part_one)
Or, you could combine that as just one method instead.
def farming(self):
code_part_one = self.egg[0]
eggID = {
"0": "Organic Egg",
"1": "Free Range Egg",
"2": "Barn Egg",
"3": "Cage Egg"
}
return eggID[code_part_one]
some notes on what you have so far:
- You could make the
eggID
dictionary a class variable, to make it easier to access for all the methods, or so that you don’t have a method whose only purpose is to return that dictionary.
- The
test
and egg_code
methods don’t use self at all, so they don’t need to be methods inside the class, they would work as functions outside of it.
- You can eliminate some of the parameters by using other methods or properties or class variables.
For example, the eggID
parameter in egg_code
is not needed if you use the .test
method.
def egg_code(self, code_part_one):
egg_ID = this.test()
print(eggID[code_part_one])
1 Like