标签: repr

为什么`print hashlib.sha224(some_string).digest()`与``repr()`不同?

我想在我的数据库表中存储一些字符串的哈希值.为此,我创建了一个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()版本还是其他版本?

python mysql hash repr

0
推荐指数
1
解决办法
585
查看次数

从文件读取时如何从类初始值设定项中删除引号.蟒蛇

我将调用存储在.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'"

如何删除这些引号,以便下次读取文件时可以重新构建类?

python quotes eval class repr

0
推荐指数
1
解决办法
141
查看次数

获取某些duck-type类的变量名

我有一个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

python duck-typing class repr

0
推荐指数
1
解决办法
56
查看次数

为什么你可以在内部使用函数repr(y)而不是str(y)使用eval()?

以下是我发现并希望有人解释的一些代码.

如果我将一个字符串赋给变量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)

不被允许.这是为什么?

python string eval repr

0
推荐指数
1
解决办法
1416
查看次数

pandas DataFrame 方法告诉 ipython 笔记本显示为 HTML

我创建了一个类,其中主要可交付数据片段作为 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)

repr getattr pandas

0
推荐指数
1
解决办法
1456
查看次数

__repr__ 中的函数导致无限递归

我正在学习 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)

python recursion repr

0
推荐指数
1
解决办法
999
查看次数

如何创建一个命名元组的__repr__?

如何创建一个特殊的方法__repr__,我可以打印,例如,'6 of spades'还是'Q of diamonds'

如何访问从数据namedtuple,牢记我有一个listnamedtuple以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 repr namedtuple python-3.x

0
推荐指数
3
解决办法
310
查看次数

__repr__ 与集合类 Python 的最佳实践是什么?

我有一个自定义的 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 等)?我应该使用分号实现某种缩短方案吗?如果是这样,是否有一种好的/标准的方法来实现这一目标?或者我应该完全跳过列出集合的内容吗?

python repr

0
推荐指数
1
解决办法
549
查看次数