之间有什么区别__str__和__repr__在__str__?
在Java中,我可以覆盖toString()我的类的方法.然后Java的print函数打印由其定义的对象的字符串表示toString().有没有相当于Java的Python toString()?
例如,我有一个PlayCard课程.我有一个PlayCard的实例c.现在:
>>> print(c)
<__main__.Card object at 0x01FD5D30>
Run Code Online (Sandbox Code Playgroud)
但我想要的是:
>>> print(c)
A?
Run Code Online (Sandbox Code Playgroud)
如何自定义类实例的字符串表示形式?
我正在使用Python 3.x.
考虑这个课程:
class foo(object):
pass
Run Code Online (Sandbox Code Playgroud)
默认字符串表示形式如下所示:
>>> str(foo)
"<class '__main__.foo'>"
Run Code Online (Sandbox Code Playgroud)
如何将此显示设为自定义字符串?
我正在编写一个ToDo列表应用程序,以帮助自己开始使用Python.该应用程序在GAE上运行,我将待办事项存储在数据存储中.我想向他们展示每个人的项目,而且他们一个人.问题是该应用程序当前向所有用户显示所有项目,因此我可以看到您所写的内容,并且您可以看到我写的内容.我想把我的todo.author对象转换成一个字符串,看看它是否与用户名相匹配将是一个好的开始,但我无法弄清楚如何做到这一点.
这就是我在main.py中的内容
...
user = users.get_current_user()
if user:
nickname = user.nickname()
todos = Todo.all()
template_values = {'nickname':nickname, 'todos':todos}
...
def post(self):
todo = Todo()
todo.author = users.get_current_user()
todo.item = self.request.get("item")
todo.completed = False
todo.put()
self.redirect('/')
Run Code Online (Sandbox Code Playgroud)
在我的index.html中我最初有这个:
<input type="text" name="item" class="form-prop" placeholder="What needs to be done?" required/>
...
<ul>
{% for todo in todos %}
<input type="checkbox"> {{todo.item}} <hr />
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
但我想只向创建它们的用户显示项目.我想过尝试
{% for todo in todos %}
{% ifequal todo.author nickname %}
<input type="checkbox"> {{todo.item}} <hr /> …Run Code Online (Sandbox Code Playgroud) 所以,我有一个自定义类,它具有__mul__与int一起使用的函数.然而,在我的程序中(在库中),它被反过来调用,即我的类2 * x在哪里x.有没有办法可以让它使用我的__mul__功能呢?
那么这个交互式python控制台代码片段将告诉所有内容:
>>> class Test:
... def __str__(self):
... return 'asd'
...
>>> t = Test()
>>> print(t)
asd
>>> l = [Test(), Test(), Test()]
>>> print(l)
[__main__.Test instance at 0x00CBC1E8, __main__.Test instance at 0x00CBC260,
__main__.Test instance at 0x00CBC238]
Run Code Online (Sandbox Code Playgroud)
基本上我想asd在打印列表时打印三个字符串.我也试过,pprint但它给出了相同的结果.
如果有人在python中编写一个类,并且未能指定自己的__repr__()方法,则为它们提供默认方法.但是,假设我们要编写一个与默认行为具有相同或相似行为的函数__repr__().但是,我们希望此函数具有默认__repr__()方法的行为,即使__repr__()该类的实际重载也是如此.也就是说,假设我们想要编写一个与默认行为具有相同行为的函数,__repr__()而不管是否有人重载了该__repr__()方法.我们怎么做?
class DemoClass:
def __init__(self):
self.var = 4
def __repr__(self):
return str(self.var)
def true_repr(x):
# [magic happens here]
s = "I'm not implemented yet"
return s
obj = DemoClass()
print(obj.__repr__())
print(true_repr(obj))
Run Code Online (Sandbox Code Playgroud)
print(obj.__repr__())打印4,但print(true_repr(obj))打印如下:
<__main__.DemoClass object at 0x0000000009F26588>
我正在使用 Python 来挖掘一个相当大的项目并挖掘有关它的信息。我能够创建一个ProjectFiles 数组,但是我很难弄清楚如何过滤它。
class ProjectFile:
def __init__(self, filename: str,
number_of_lines: int,
language: str,
repo: str,
size: int):
self.filename = filename
self.number_of_lines = number_of_lines
self.language = language
self.repo = repo
self.size = size
Run Code Online (Sandbox Code Playgroud)
我如何过滤ProjectFile特定对象的数组repo?
例如,假设我想过滤repo属性为 的对象SomeCocoapod。
我寻找过 的示例filter,但我找到的所有内容都使用简单的示例,例如str或 的列表int。
我有一个Python脚本来处理包含报告使用信息的.txt文件.我想找到一种方法来使用pprint的pprint(vars(object))函数干净地打印对象的属性.
该脚本读取文件并创建Report类的实例.这是班级.
class Report(object):
def __init__(self, line, headers):
self.date_added=get_column_by_header(line,headers,"Date Added")
self.user=get_column_by_header(line,headers,"Login ID")
self.report=get_column_by_header(line,headers,"Search/Report Description")
self.price=get_column_by_header(line,headers,"Price")
self.retail_price=get_column_by_header(line,headers,"Retail Price")
def __str__(self):
from pprint import pprint
return str(pprint(vars(self)))
Run Code Online (Sandbox Code Playgroud)
我希望能够干净地打印报告的实例a-la-pprint.
for i,line in enumerate(open(path+file_1,'r')):
line=line.strip().split("|")
if i==0:
headers=line
if i==1:
record=Report(line,headers)
print record
Run Code Online (Sandbox Code Playgroud)
我打电话的时候
print record
Run Code Online (Sandbox Code Playgroud)
对于单个Report实例,这是我在shell中得到的.
{'date_added': '1/3/2012 14:06',
'price': '0',
'report': 'some_report',
'retail_price': '0.25',
'user': 'some_username'}
None
Run Code Online (Sandbox Code Playgroud)
我的问题是双重的.
首先,这是一种干净地打印对象属性的好/期望方式吗?有或没有pprint有更好的方法吗?
第二,为什么呢
None
Run Code Online (Sandbox Code Playgroud)
最后打印到shell?我很困惑那来自哪里.
谢谢你的任何提示.
python的新手,尝试创建卡片组并希望为print(deck)=>实现一种打印方法,该方法给出了我的卡片的打印列表。
我的类PlayingCard具有str方法,该方法可以很好地打印单张纸牌。
但是,当我创建Deck.cards对象(这是PlayingCard对象的列表)时,似乎无法一次打印所有纸牌。
试着更换海峡与再版。尝试返回str中的字符串列表
from enum import Enum
class Value(Enum):
Two = 2
Three = 3
Four = 4
Five = 5
Six = 6
Seven = 7
Eight = 8
Nine = 9
Ten = 10
Jack = 11
Queen = 12
King = 13
Ace = 14
class Suit(Enum):
Spades = 1
Hearts = 2
Clubs = 3
Diamonds = 4
class PlayingCard():
def __init__(self,value,suit):
self.value = value
self.suit = …Run Code Online (Sandbox Code Playgroud)