Не хватает знаний для создания класса. Помогите пожалуйста!
Написал такой класс:
class Sun:
def __init__(self, a, b):
self.a = a
self.b = b
self.c = None
self.d = None
def sunset(self):
self.c = 'sunset'
return self.calc()
def sunrise(self):
self.c = 'sunrise'
return self.calc()
def official(self):
self.d = 'official'
return self.calc()
def civil(self):
self.d = 'civil'
return self.calc()
def calc(self):
x = self.a + self.b + self.c + self.d
return x
Вкратце что мне нужно. Создать экземпляр со значениями a и b.
sun = Sun('a', 'b')
Путем вызова функции получить вычисленное значение из метода calc, чтобы получился типа такой запрос со следующим значением:
print(sun.sunrise.civil()) # вывод: absunrisecivil
print(sun.sunrise.official()) # вывод: absunriseofficial
print(sun.sunset.official()) # вывод: absunsetofficial
Важный момент это то, что sunset и sunrise не должен ничего возвращать самостоятельно, а только со значением либо civil, либо official.
из sun может быть вызван только sunset или sunrise
из sunset может быть вызван только civil и official
из sunrise может быть вызван только civil и official
Описал проблему как мог ))) Подскажите пожалуйста, как реализовать?
Ответы (3 шт):
Сделай Sun родительским а sunset и sunrise наследниками. И потом просто вызывай тот или тот класс с параметрами. Если в условия нет что должен быть только 1 класс.
class Sun:
def __init__(self, a, b):
self.a = a
self.b = b
self.c = None
self.d = None
def official(self):
self.d = 'official'
return self.calc()
def civil(self):
self.d = 'civil'
return self.calc()
def calc(self):
return self.a + self.b + self.c + self.d
class Sunset(Sun):
def __init__(self, a, b):
super().__init__(a, b)
self.c = 'sunset'
class Sunrise(Sun):
def __init__(self, a, b):
super().__init__(a, b)
self.c = 'sunrise'
sunset = Sunset('a', 'b')
sunrise = Sunrise('a', 'b')
print(sunset.civil())
print(sunrise.official())
По хорошему конечно стоит создать 2 класса:
class SunPos:
def __init__(self, sun, pos):
self.startWith = f'{sun.a}{sun.b}{pos}'
def civil(self):
return f'{self.startWith}civil'
def offical(self):
return f'{self.startWith}offical'
class Sun:
def __init__(self, a, b):
self.a = a; self.b = b
self.sunrise = SunPos(self, "sunrise")
self.sunset = SunPos(self, "sunset")
Таким образом ваши примеры работают корректно
Вот код, которые работает как нужно:
class SunPos:
def __init__(self, sun, pos):
self.a = sun.a
self.b = sun.b
self.c = pos
self.d = None
def civil(self):
self.d = 10
return self.calc()
def offical(self):
self.d = 20
return self.calc()
def calc(self):
return self.a * self.b * self.c * self.d
class Sun:
def __init__(self, a, b):
self.a = a
self.b = b
self.sunrise = SunPos(self, 1)
self.sunset = SunPos(self, 15)
x = Sun(10, 5)
print(x.sunrise.offical()) # Вывод: 1000