class Person:
def __init__(self, name, surname, age):
self.name = name
self.surname = surname
self.age = age
def show(self):
print(("Name: {}\nSurname: {}\nAge: {}").format(self.name, self.surname, self.age))
是否有更多pythonic方式通过函数show显示这些变量?
当我在课堂上有34个变量
时,我不想要意大利面条代码答案 0 :(得分:0)
不确定它是否更Pythonic,但不是定义show
,而是可以覆盖__repr__
(您需要return
该字符串而不是打印它。然后,您可以只调用person_obj.show
而不是调用print(person_obj)
。
class Person:
def __init__(self, name, surname, age):
self.name = name
self.surname = surname
self.age = age
def __repr__(self):
return "Name: {}\nSurname: {}\nAge: {}").format(self.name, self.surname, self.age)
print(Person('a','b', 'c'))
>> Name: a
Surname: b
Age: c
即使您有人员列表,也会正确显示:
print([Person('a', 'b', 'c'), Person('d', 'e', 'f')])
>> [Name: a
Surname: b
Age: c, Name: d
Surname: e
Age: f]
答案 1 :(得分:0)
如果您不想覆盖__str__
并且非常需要show
来打印,而不是返回数据,则使用format
仍然更加pythonic。我对你的代码做了一些调整:
def show(self):
person_info = "Name {name}\nSurname {surname}\nAge {age}".format(name=self.name, surname=self.surname, age=self.age)
print (person_info)
一般情况下,它与您的情况相同,只是更明确一些。
答案 2 :(得分:0)
你可以利用课程'内部__dict__
属性,以避免两次输入所有变量。此外,最好使用代表类的 __repr__
函数:
class Person(object):
def __init__(self, name, surname, age):
self.name = name
self.surname = surname
self.age = age
def __repr__(self):
return '\n'.join([
'Name: {name}',
'Surname: {surname}',
'Age: {age}'
]).format(**self.__dict__)
john = Person('John', 'Doe', 42)
print(john)
为避免对格式字符串进行硬编码,您可以采取的另一个抽象步骤是创建标识实例的属性列表,并按如下方式使用它们:
class Person(object):
_identifiers = ('name', 'surname', 'age')
def __init__(self, name, surname, age):
self.name = name
self.surname = surname
self.age = age
def __repr__(self):
return '\n'.join(
'{k}: {v}'.format(k=key.capitalize(), v=self.__dict__[key])
for key in self._identifiers
)
john = Person('John', 'Doe', 42)
print(john)