我想在我的数据库表中存储一些字符串的哈希值.为此,我创建了一个varchar(64)类型的列.我确实生成了这样的哈希:
>>> thehash = hashlib.sha224(some_string).digest()
Run Code Online (Sandbox Code Playgroud)
现在我意识到了
>>> print thehash
Run Code Online (Sandbox Code Playgroud)
是不一样的
>>> thehash
Run Code Online (Sandbox Code Playgroud)
(到现在为止,我知道>>> print 'test'和>>> 'test'...... 之间的区别:-))我很困惑我现在应该存储哪一部分.该repr()版本还是其他版本?
我将调用存储在.dat文件的数组中的类Task.我想读取这个文件并重新构建类调用.
这是我现在正在使用的课程:
class Task:
def __init__(self, name, timespent):
self.name = name
self.timespent = timespent
def __repr__(self):
return repr('Task("%s",%s)'%(self.name, self.timespent))
Run Code Online (Sandbox Code Playgroud)
这是文件中的读数:
task_list = []
with open("task_list2.dat", "r") as file:
task_list = eval(file.readline())
Run Code Online (Sandbox Code Playgroud)
这是写入文件:
with open("task_list2.dat", "w") as outFile:
print(repr(task_list), file = outFile)
Run Code Online (Sandbox Code Playgroud)
这是文件的内容:
['Task("class",20)']
其中"class"是任务的名称.
我知道问题与'Task("class",20)'周围的单引号有关,但我不知道如何摆脱它们.我得到的错误消息说的是:"str对象没有属性'name'"
如何删除这些引号,以便下次读取文件时可以重新构建类?
我有一个Language班级:
class _Language:
def __init__(self, name, bRightToLeft=False):
self.name = name
self.bRightToLeft = bRightToLeft
def isRightToLeft(self):
return self.bRightToLeft
def getName(self):
return self.name
class Language:
EN = _Language("English")
AF = _Language("Afrikaans")
SQ = _Language("Albanian")
Run Code Online (Sandbox Code Playgroud)
我创建一个Language对象:
l1 = Language.EN
Run Code Online (Sandbox Code Playgroud)
在对english对象进行一些处理之后,我想检索它的"子类型",即EN.例如:
print l1
Run Code Online (Sandbox Code Playgroud)
[OUT]:
EN
Run Code Online (Sandbox Code Playgroud)
我已经尝试过在语言课中添加__repr__或者一个__str__但是我没有得到的EN时候我print l1:
class Language:
EN = _Language("English")
AF = _Language("Afrikaans")
SQ = _Language("Albanian")
def __str__(self):
return self.__name__
Run Code Online (Sandbox Code Playgroud)
[OUT]:
Language
Run Code Online (Sandbox Code Playgroud)
我怎么能访问变量名称,这样当print l1我得到它EN?
以下是我发现并希望有人解释的一些代码.
如果我将一个字符串赋给变量y,用eval函数计算它并将内容分配给变量y2,解释器返回true.
>>> y = 'a string'
>>> y2 = eval(repr(y))
>>> y == y2
>>> True
Run Code Online (Sandbox Code Playgroud)
以这种方式使用str(y):
>>> eval(str(y))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
a string
^
SyntaxError: unexpected EOF while parsing
Run Code Online (Sandbox Code Playgroud)
不被允许.这是为什么?
我创建了一个类,其中主要可交付数据片段作为 pandas DataFrame 存储在属性中。我希望此类实例的默认显示行为与此 DataFrame 的默认显示行为相同。特别是在 iPython Notebook 中。
例如:
from pandas import DataFrame
class TestDFDisplay():
def __init__(self):
self.dataframe = DataFrame([[1, 2], [3, 4]])
tdf = TestDFDisplay()
Run Code Online (Sandbox Code Playgroud)
当我:
tdf.dataframe
Run Code Online (Sandbox Code Playgroud)
我得到以下 HTML 版本:
0 1
0 1 2
1 3 4
Run Code Online (Sandbox Code Playgroud)
当我:
tdf
Run Code Online (Sandbox Code Playgroud)
我得到:
<__main__.TestDFDisplay instance at 0x000000001A836788>
Run Code Online (Sandbox Code Playgroud)
我宁愿得到相同的 HTML:
0 1
0 1 2
1 3 4
Run Code Online (Sandbox Code Playgroud)
相反,我可以:
from pandas import DataFrame
class TestDFDisplay():
def __init__(self):
self.dataframe = DataFrame([[1, 2], [3, 4]])
def __getattr__(self, item):
try:
return object.__getattribute__(self, item)
except …Run Code Online (Sandbox Code Playgroud) 我正在学习 Python,并尝试编写以下代码。
class AttributeDisplay:
'''Display all attributes of a class in __repr__.
It can be inherited.'''
def gatherAttributes(self):
'''Gather all attributes and concatenate them
as a string'''
def getAttributeNameAndValue(key):
return '[%s] - [%s]' % (key, getattr(self, key))
return '\n'.join((map(getAttributeNameAndValue, sorted(self.__dict__))))
def __repr__(self):
'''Print all attributes'''
attr = self.gatherAttributes() # omitting () results in infinite recursion
return '[Class: %s]\n%s' % (self.__class__.__name__, attr)
Run Code Online (Sandbox Code Playgroud)
我不小心省略了括号,attr 变成了一个函数而不是一个字符串。但是,当我调用 时print(X),它进入了无限递归。
错误代码如下。
def __repr__(self):
'''Print all attributes'''
attr = self.gatherAttributes # omitting () results in …Run Code Online (Sandbox Code Playgroud) 如何创建一个特殊的方法__repr__,我可以打印,例如,'6 of spades'还是'Q of diamonds'?
如何访问从数据namedtuple,牢记我有一个list的namedtuple以s self._cards?
import collections
cards = collections.namedtuple('Card', ['rank', 'suit'])
class Deck:
ranks = [str(n) for n in range (2,11)] + list('JQKA')
suits = 'spades diamonds hearts clubs'.split()
def __init__(self):
self._cards = [cards(rank, suit) for suit in self.suits for rank in self.ranks]
def __len__(self):
return len(self._cards)
def __getitem__(self, item):
return self._cards[item]
def __repr__(self):
return '%s of %s' % () # <-- don't know …Run Code Online (Sandbox Code Playgroud) 我有一个自定义的 Python 类,它本质上封装了list某种对象,我想知道我应该如何实现它的__repr__功能。我很想采用以下方法:
class MyCollection:
def __init__(self, objects = []):
self._objects = []
self._objects.extend(objects)
def __repr__(self):
return f"MyCollection({self._objects})"
Run Code Online (Sandbox Code Playgroud)
这具有生成完整描述类实例的有效 Python 输出的优点。然而,在我的真实案例中,对象列表可能相当大,每个对象本身可能有一个很大的代表(它们本身就是数组)。
在这种情况下,最佳做法是什么?接受 repr 可能通常是一个很长的字符串吗?是否存在与此相关的潜在问题(调试器 UI 等)?我应该使用分号实现某种缩短方案吗?如果是这样,是否有一种好的/标准的方法来实现这一目标?或者我应该完全跳过列出集合的内容吗?
repr ×8
python ×7
class ×2
eval ×2
duck-typing ×1
getattr ×1
hash ×1
mysql ×1
namedtuple ×1
pandas ×1
python-3.x ×1
quotes ×1
recursion ×1
string ×1