簡體   English   中英

如何定義需要來自不同類的屬性的方法?

[英]How can I define a method where I need attributes from different classes?

我從教授那里得到了一個程序,我必須在其中完成一些任務。 由於我們目前正在學習“類繼承”,因此我還不太擅長。 我們接到了一個任務,上面寫着“擴展鼠標、屏幕和鍵盤的輸出,以便用戶知道他們屬於哪個房間的哪台計算機”。 我這樣做了,但我不確定它是否屬實,或者是否有更好的解決方案。 任何人都可以向我解釋整個事情是否可以更好地解決,如果可以,為什么? 我已經在每個類中定義了一個方法,我將它作為輸出,但是有沒有更好的方法,我只需要定義一個方法一次,這適用於所有其他類? 提前致謝

這是我的代碼:

class Room:
    __name = "unknown"

    def __init__(self, name):
        self.__name = name

    def get_name(self):
        return self.__name
    
class Device:
    __name = "Device"

    def __init__(self, name):
        self.__name = name

    def as_text(self):
        return "%s" % (self.__name)

class Computer(Device):
    __ip = "unknown"
    def __init__(self, name, ip, room):
        super().__init__(name)
        self.__ip = ip
        self.__room = room

    def as_text(self):
        return "%s with ip=%s" % (super().as_text(), self.__ip)

class Laptop(Computer):
    def __init__(self, name, room, ip, with_case = True):
         super().__init__(name, room, ip)
         self.__with_case = with_case

    def as_text(self):
        if (self.__with_case):
            return "%s with case" % super().as_text()
        else:
            return super().as_text() 
   
class Screen(Device):
    __width = "1920"
    __height = "1080"
    def __init__(self, name, room, width, height, computer):
        super().__init__(name)
        self.__room = room
        self.__width = width
        self.__height = height
        self.__computer = computer

    def as_text(self):
        return "%s with resolution %dx%d" % (super().as_text(), self.__width, self.__height)

    def screen_location_computer(self):
        return 'The screen with the height {} and width {} is located in Room {} and belongs to the computer {}'.format(self.__height, self.__width , self.__room.get_name(), self.__computer)

class Keyboard(Device):
    __language = 'English'
    def __init__(self, name, room, language, computer):
        super().__init__(name, room)
        self.__language = language
        self.__computer = computer

    def keyboard_location_computer(self):
        return 'The keyboard with the language {] is located in Room {} and belongs to the computer {}'.format(self.__language, self.__room.get_name(), self.__computer)    

class Mouse(Device):
    __type = 'Gaming Mouse'
    def __init__(self, name, room, type, computer):
        super().__init__(name, room)
        self.__type = type
        self.__computer = computer

    def mouse_location_computer(self):
        return 'The mouse with the type {] is located in Room {} and belongs to the computer {}'.format(self.__type, self.__room.get_name(), self.__computer)    

您應該嘗試重新組合超類中的所有公共屬性和方法,而只在子類中保留專門的屬性,這樣可以最大限度地減少對方法和參數的需求。

我重命名為“描述”的方法同上:一個部分對所有實例(結尾)是通用的,而另一個(開頭)是特定的。 讓 super 處理公共部分並將其傳遞給專門部分以組裝整個字符串。

(為了簡單起見,我刪除了一些類和屬性)

    class Device():
    __computer = None
    __name = None
    __room = None
    
    def __init__(self, name, computer, room):
        self.__name = name
        self.__computer = computer
        self.__room = room
    def room(self):
        return self.__room
    def name(self):
        return self.__name
    def description(self, str):
        return '{} is located in Room "{}" and belongs to the computer "{}"'.format(str, self.__room, self.__computer.name())
    

class Computer(Device):
    def __init__(self, name, room):
        super().__init__(name, self, room)

class Screen(Device):
    __width = "1920"
    __height = "1080"
    def __init__(self, name, computer, width, height):
        super().__init__(name, computer, computer.room())
        self.__width = width
        self.__height = height

    def description(self):
        return super().description('The screen with the height {} and width {}'.format(self.__height, self.__width))

class Mouse(Device):
    __type = 'Gaming Mouse'
    def __init__(self, name, computer, type):
        super().__init__(name, computer, computer.room())
        self.__type = type

    def description(self):
        return super().description('The mouse with the type {}'.format(self.__type))

cpt = Computer("Acer", "Classroom 12")
cpt2 = Computer("iMac 15", "Classroom 38")
screen = Screen("27 inch", cpt2, 1920, 1080)
mouse = Mouse("Mouse", cpt, "Gaming")

print (screen.description())
print (mouse.description())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM