Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.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_Class_Output - Fatal编程技术网

Python 打印类

Python 打印类,python,class,output,Python,Class,Output,嗨,我正在尝试使用一个类打印4个乐队成员的详细信息,但是我只能打印一个,我将在下面给出示例让您理解,这是我的全部代码 class Person: def __init__(self, _firstname, _surname, d, m, y): self._firstname = _firstname self._surname = _surname self.d = d self.m = m self.y

嗨,我正在尝试使用一个类打印4个乐队成员的详细信息,但是我只能打印一个,我将在下面给出示例让您理解,这是我的全部代码

class Person:
    def __init__(self, _firstname, _surname, d, m, y):
        self._firstname = _firstname
        self._surname = _surname
        self.d = d
        self.m = m
        self.y = y

    def __repr__(self):
        return '{} {} \n{} {} {}'.format(john._firstname, john._surname, john.d, john.m, john.y)
        return '{} {} \n{} {} {}'.format(paul._firstname, paul._surname,     paul.d, paul.m, paul.y)
        return '{} {} \n{} {} {}'.format(george._firstname,     george._surname, george.d, george.m, george.y)
        return '{} {} \n{} {} {}'.format(ringo._firstname, ringo._surname,     ringo.d, ringo.m, ringo.y)

john = Person('John','Lennon','8th','October','1940')
paul = Person('Paul','McCartney','18th','June','1942')
george = Person('George','Harrison','25th','February','1943')
ringo = Person('Ringo','Starr','7th','July','1940')


john._firstname = 'John'
john._surname = 'Lennon'
john.d = '8th'
john.m = 'October'
john.y = '1940'


paul._firstname = 'Paul'
paul._surname = 'McCartney'
paul._d = '18th'
paul._m = 'June'
paul._y = '1942'

george._firstname = 'George'
george._surname = 'Harrison'
george._d = '25th'
george._m = 'February'
george._y = '1943'

ringo._firstname = 'Ringo'
ringo._surname = 'Starr'
ringo._d = '7th'
ringo._m = 'July'
ringo._y = '1940'

print('{} {} \n{} {} {}'.format(john._firstname, john._surname, john.d, john.m, john.y))
print('{} {} \n{} {} {}'.format(paul._firstname, paul._surname, paul.d,     paul.m, paul.y))
print('{} {} \n{} {} {}'.format(george._firstname, george._surname,         george.d, george.m, george.y))
print('{} {} \n{} {} {}'.format(ringo._firstname, ringo._surname,     ringo.d,     ringo.m, ringo.y))
我收到正确的输出,即:

John Lennon
8th October 1940
Paul McCartney 
18th June 1942
George Harrison 
25th February 1943
Ringo Starr 
7th July 1940
我希望能够键入:

print(john)
print(george)
print(paul)
print(ringo)
但是,为了获得相同的输出,当我键入此内容并删除底部的4行打印行时,我得到了以下结果

John Lennon 
8th October 1940
John Lennon 
8th October 1940
John Lennon 
8th October 1940
John Lennon 
8th October 1940
到目前为止,我的理解是,
\uuu repr\uuuu(self)
只能读取一行代码,那就是
john
,但我的知识就到此为止了


非常感谢您的帮助!如果您需要更多信息,请询问,我对这一点很陌生,因为我在大学的第一年,所以我感谢您的耐心和帮助!:)

任何
return
命令都将简单地退出函数,因此在同一级别上有多个
return
命令在Python中永远不会起作用

代码的问题在于,您应该在
\uuuu repr\uuuu
定义中使用关键字
self
,这样您就可以通过创建的所有四个实例访问它

john = Person('John','Lennon','8th','October','1940')
paul = Person('Paul','McCartney','18th','June','1942')
george = Person('George','Harrison','25th','February','1943')
ringo = Person('Ringo','Starr','7th','July','1940')
Person
实例的创建也将自动存储您输入的所有信息,因此无需手动为
john.\u firstname
等指定值

给出明确的答案:

class Person:
    def __init__(self, _firstname, _surname, d, m, y):
        self._firstname = _firstname
        self._surname = _surname
        self.d = d
        self.m = m
        self.y = y

    def __repr__(self):
        return '{} {} \n{} {} {}'.format(self._firstname,
                                         self._surname,
                                         self.d,
                                         self.m,
                                         self..y)

john = Person('John','Lennon','8th','October','1940')
paul = Person('Paul','McCartney','18th','June','1942')
george = Person('George','Harrison','25th','February','1943')
ringo = Person('Ringo','Starr','7th','July','1940')

print(john)
print(paul)
print(george)
print(ringo)

您的
\uuu repr\uuu
讨论了类实例,如
john
。它的编写需要满足
Person
的任何实例

def __repr__(self):
    return '{} {} \n{} {} {}'.format(self._firstname, self._surname, self.d, self.m, self.y)

在函数中留下一个
return
-语句。忽略以下行。 在方法中,当访问属性时,您仅为对象本身使用占位符。使用
self
而不是对象的真实名称

def __repr__(self): 
  return '{} {} \n{} {} {}'.format(
    self._firstname, self._surname, self.d, self.m, self.y)

您的
\uuuu repr\uuuu
函数有点奇怪。例如,使用
self
而不是
john
,并且只返回一个字符串。大多数代码是不必要的;创建对象时传递参数的目的是,这样以后就不需要编写类似于
john的东西<代码>\uuuu init\uuuuu
已经被调用并为您完成了这项工作。此外,您确实应该定义
\uuuuuu str\uuuuuuu
,而不是
\uuu repr\uuuuu
。这两种方法都返回对象的字符串表示形式,但有不同的用例。在Python中,名称以下划线开头的成员被视为私有成员(它不在帮助中列出)。因此,您应避免直接访问/设置这些。如果您想这样做,那么这些成员不应该是私有的。