Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何定义从其他类返回属性的方法_Python_Oop_Inheritance_Methods_Attributes - Fatal编程技术网

Python 如何定义从其他类返回属性的方法

Python 如何定义从其他类返回属性的方法,python,oop,inheritance,methods,attributes,Python,Oop,Inheritance,Methods,Attributes,在我的程序中,我有以下问题。如何在类“Mouse”、“Keyboard”和“Screen”中定义一个方法,以便它们返回房间和它们所属的计算机+类的关联属性(因此对于Keyboard类,这将是:'计算机{}位于房间{}中,并且具有{}语言')有人能告诉我如何在不改变程序本身的情况下为这3个类定义这样的方法吗?应该为每个分离的类定义方法。确切的任务是“扩展MAU、screen和tastatur的输出,以便用户知道它们属于哪个房间的计算机” 我尝试定义以下方法: def as_text(self):

在我的程序中,我有以下问题。如何在类“Mouse”、“Keyboard”和“Screen”中定义一个方法,以便它们返回房间和它们所属的计算机+类的关联属性(因此对于Keyboard类,这将是:'计算机{}位于房间{}中,并且具有{}语言')有人能告诉我如何在不改变程序本身的情况下为这3个类定义这样的方法吗?应该为每个分离的类定义方法。确切的任务是“扩展MAU、screen和tastatur的输出,以便用户知道它们属于哪个房间的计算机”

我尝试定义以下方法:

def as_text(self):
        return "{} an {} in {}".format(self.__name, self.__computer, self.__computer.__room)
在我的三节课中,我加入了对计算机的引用。我的类计算机有一个对room的引用,因此我尝试使用
self.\uu Computer.\uu room
调用它,但这不起作用,我不确定如何调用此属性

这是我的密码:

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, width, height, computer):
        super().__init__(name)
        self.__width = width
        self.__height = height
        self.__computer = computer

    def as_text(self):
        return "{} an {}".format(self.__name, self.__computer)


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

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


你的要求不是特别清楚,这是我得到的。 这是我对Screen类的方法:

def as_text(self):
返回{}格式的{}和{}。格式(super().as_text(),self.\u computer.as_text(),self.\u computer.display_room())
这将从父类设备调用方法
作为\u text

 self.__computer.as_text()
这将从计算机类的实例调用
as_text()
方法,该实例是类屏幕的属性

self.__computer.display_room()
这将从Computer类调用方法
display\u room()
,我创建了它并返回房间的名称

def显示室(自):
返回self.\u房间。获取\u名称()

现在,您应该能够自己为Tastur和Maus编写方法了。

您的请求不是特别明确,这里是我得到的。 这是我对Screen类的方法:

def as_text(self):
返回{}格式的{}和{}。格式(super().as_text(),self.\u computer.as_text(),self.\u computer.display_room())
这将从父类设备调用方法
作为\u text

 self.__computer.as_text()
这将从计算机类的实例调用
as_text()
方法,该实例是类屏幕的属性

self.__computer.display_room()
这将从Computer类调用方法
display\u room()
,我创建了它并返回房间的名称

def显示室(自):
返回self.\u房间。获取\u名称()

现在,您应该可以自己为Tastur和Maus编写方法了。

不要再像这样使用双下划线名称了。另外,停止创建类变量,只在
\uuuu init\uuuu
中立即使用实例变量对其进行阴影处理,这是我的老师的要求,必须保持这种方式。请注意,您正在学习“Python中的Java”。无论如何,你都试过什么?不清楚您所说的“有人能告诉我如何在不更改程序本身的情况下为这3个类定义这样的方法”是什么意思吗?您所说的“不更改程序本身”是什么意思?定义方法就是改变程序本身。但无论如何,你的要求/限制对我来说是完全清楚的。@juanpa.arrivillaga对不起,这是我老师给我的一个程序。我只是想做一些像我上面提到的那样的改变。你知道我怎么能再这样做吗?你试过什么吗?对不起,这不是你们班的辅导服务。我们不仅仅是为你做家庭作业。到底是什么给你带来了麻烦?不要再像这样使用双下划线名称了。另外,停止创建类变量,只在
\uuuu init\uuuu
中立即使用实例变量对其进行阴影处理,这是我的老师的要求,必须保持这种方式。请注意,您正在学习“Python中的Java”。无论如何,你都试过什么?不清楚您所说的“有人能告诉我如何在不更改程序本身的情况下为这3个类定义这样的方法”是什么意思吗?您所说的“不更改程序本身”是什么意思?定义方法就是改变程序本身。但无论如何,你的要求/限制对我来说是完全清楚的。@juanpa.arrivillaga对不起,这是我老师给我的一个程序。我只是想做一些像我上面提到的那样的改变。你知道我怎么能再这样做吗?你试过什么吗?对不起,这不是你们班的辅导服务。我们不仅仅是为你做家庭作业。到底是什么给你带来了麻烦?