#python #class
#python #класс
Вопрос:
Я новичок в python, пытаюсь разобраться в классах и ООП. Я просто не могу представить, когда я буду использовать класс в программе, поэтому я просто решил попробовать организовать этот код с помощью классов, прежде чем выполнять некоторые модульные тесты. практика на нем. Не уверен, что добавление классов к этому было бы вообще полезно, но я думаю, что это, по крайней мере, организовало бы его. Может кто-нибудь помочь, связанные с классом и объектами в этом коде, пожалуйста.
def Max_Month(max):
maxind = rainfalllist.index(max)
maxmonth = months.pop(maxind)
return maxmonth
def Min_Month(min):
minind = rainfalllist.index(min)
minmonth = months.pop(minind)
return minmonth
def Rain_Fall_Math(rainfalllist):
ave_rain = sum(rainfalllist) / len(rainfalllist)
high_rain = max(rainfalllist)
min_rain = min(rainfalllist)
print(f"Total Rainfall:{rainfalllist}")
print(f"The average monthly precipitation:{ave_rain}")
print(f"The highest monthly precipitation: {high_rain}")
print(f"The lowest monthly precipitation: {min_rain}")
print(f"The month(s) with the highest precipitation:",Max_Month(high_rain))
print(f"The month(s) with the lowest precipitation:",Min_Month(min_rain))
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
rainfalllist = list()
for month in months:
_ = float(input(f"What was the precipitation in {month}?"))
rainfalllist.append(_)
Rain_Fall_Math(rainfalllist)
Комментарии:
1. Какая часть ООП вас больше всего смущает? Или вообще, почему вы хотите использовать ООП вместо этого?
Ответ №1:
Для того, что пытается сделать ваш код, я не думаю, что ООП — это правильный путь. Если вам нужны примеры того, когда использовать классы и объекты, то хороший совет — использовать их, если вы хотите создать свою собственную структуру данных (аналогичную struct в c и c ) или что-то абстрагировать. Еще одна вещь, которую следует иметь в виду, это то, что только потому, что вы можете использовать ООП, это не значит, что это единственный способ чего-то достичь. Вы также должны взглянуть на 4 столпа ООП, абстракцию, наследование, полиморфизм и инкапсуляцию.
Допустим, вы хотели представить множество людей с их собственными атрибутами и применить к ним функции.
Вы могли бы сделать это ООП следующим образом
class Human:
humans = [] # array of all humans
def __init__(self, name, age, hairclr, eyeclr, favfood, house, height):
self.name = name
self.age = age
self.hairclr = hairclr
self.eyeclr = eyeclr
self.favfood = favfood
self.house = house
self.height = height
Human.humans.append(self)
def growOld(self, years):
self.age = years
self.height = years * .04
def moveHouses(self, newhouse):
self.house = newhouse
def foo(self, a,b,c):
pass
def interact(self, anotherhuman):
if self.name == anotherhuman:
greet()
talk()
saygoodbye()
if self.age < another.human.age:
stuff()
def __add__(self, anotherhuman):
# DUNDER METHODS ARE SUPER COOL LOOK INTO THEM
#they essentially act as if
# h1 and h2 were human objects, this method is called if you try to do something like
# h1 h2
self.height = anotherhuman.height
Я не думаю, что один пример мог бы охватить все возможности ООП, и я думаю, что есть лучшие примеры, где ООП — это путь, но я думаю, вы можете увидеть, для чего можно было бы использовать ООП.
Другой пример из одного из моих проектов похож на этот, который использует наследование и полиморфизм
from math import sqrt
class UIComponent:
def __init__(self, x, y, state):
self.x = x
self.y = y
self.state = state
def getDist(self, x2, y2):
return sqrt((x2 - self.x)**2 (y2 - self.y)**2)
def setGlobalCoords(self, c1, c2):
self.c1 = c1
self.c2 = c2
update()
def update():
#stuff
pass
class TextUiComponent(UIComponent):
def __init__(self, x,y, state, text):
super(self, TextUiComponent).__init__(x,y,state)
self.text = text
def updateText(self, newtext, newfont):
self.text = newtext
self.font = newfont
self.update() #from earlier
class ImgUIComponent(UIComponent):
def __init__(self, x,y, state, img):
super(self, TextUiComponent).__init__(x,y,state)
self.img = img
def transfromImg(self, scale):
transform(self.img, scale) # or self.img.transfrom(scale) this is all psuedocode
#other stuff
setGlobalCoords(scale, 1 scale)
Если вы хотите создавать сложные структуры данных с их собственными операциями или абстрагировать что-то вместе со многими другими случаями, тогда рассмотрите эту парадигму.
В ООП есть еще много чего, о чем можно поговорить, и я не смог бы дать полное изложение, но суть такова, и я предлагаю вам изучить подробнее, если вы в замешательстве, но ООП — это мощный инструмент.