Привязка классов к этой программе, чтобы помочь лучше понять, как программировать с помощью классов

#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)

  

Если вы хотите создавать сложные структуры данных с их собственными операциями или абстрагировать что-то вместе со многими другими случаями, тогда рассмотрите эту парадигму.

В ООП есть еще много чего, о чем можно поговорить, и я не смог бы дать полное изложение, но суть такова, и я предлагаю вам изучить подробнее, если вы в замешательстве, но ООП — это мощный инструмент.