表示对象值 __str__

Representing object values __str__

我有以下代码:

import urllib

class Get:

    def sendData(self):
        self.data = urllib.urlencode({"contains":"silabeador"})   
        self.u = urllib.urlopen('http://tip.iatext.ulpgc.es/silabas/default.aspx', data)

request=Get()
print (request.sendData)

我发送到url的数据的输出或返回值如下:

<bound method Get.sendData of <__main__.Get instance at 0x7f6089f5e050>>

如何获取对象 Get 的值而不是它们的表示?

顺便说一句,我是 python 的新手,有兴趣向某个站点发送几个值,并且该站点在 texbox 中接收这些值并搜索和检索这些搜索值。我这样说是因为请求库 http://docs.python-requests.org/en/latest/ 它真的是一个很好的选择吗?

此致

编辑

我整理了我的这种更好的方式的小代码:

import urllib

class Get:              
    def __init__(self):
        data = urllib.urlencode({"contains":"silabeador"})   
        u = urllib.urlopen('http://localhost:8000/login/', data)
        print(u.read())
request=Get()
print request

当我尝试获取我的小页面的值时(在我的本地主机上) 我得到了它们,但最后我也看到了对象值, <main.Get instance at 0x7f052c4e00e0> 最后的值 ...

➜  ~  python2 pageGET.py          

<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="robots" content="NONE,NOARCHIVE">
  <title>403 Forbidden</title>
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; background:#eee; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; margin-bottom:.4em; }
    h1 span { font-size:60%; color:#666; font-weight:normal; }
    #info { background:#f6f6f6; }
    #info ul { margin: 0.5em 4em; }
    #info p, #summary p { padding-top:10px; }
    #summary { background: #ffc; }
    #explanation { background:#eee; border-bottom: 0px none; }
  </style>
</head>
<body>
<div id="summary">
  <h1>Prohibido <span>(403)</span></h1>
  <p>CSRF verificacion fallida. Solicitud abortada</p>


  <p>Estás viendo este mensaje porqué esta web requiere una cookie CSRF cuando se envían formularios. Esta cookie se necesita por razones de seguridad, para asegurar que tu navegador no ha sido comprometido por terceras partes.</p>
  <p>Si has inhabilitado las cookies en tu navegador, por favor habilítalas nuevamente al menos para este sitio, o para solicitudes del mismo origen.</p>

</div>

<div id="info">
  <h2>Help</h2>

    <p>Reason given for failure:</p>
    <pre>
    CSRF cookie not set.
    </pre>


  <p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when
  <a
  href="https://docs.djangoproject.com/en/1.8/ref/csrf/">Django's
  CSRF mechanism</a> has not been used correctly.  For POST forms, you need to
  ensure:</p>

  <ul>
    <li>Your browser is accepting cookies.</li>

    <li>The view function passes a <code>request</code> to the template's <a
    href="https://docs.djangoproject.com/en/dev/topics/templates/#django.template.backends.base.Template.render"><code>render</code></a>
    method.</li>

    <li>In the template, there is a <code>{% csrf_token
    %}</code> template tag inside each POST form that
    targets an internal URL.</li>

    <li>If you are not using <code>CsrfViewMiddleware</code>, then you must use
    <code>csrf_protect</code> on any views that use the <code>csrf_token</code>
    template tag, as well as those that accept the POST data.</li>

  </ul>

  <p>You're seeing the help section of this page because you have <code>DEBUG =
  True</code> in your Django settings file. Change that to <code>False</code>,
  and only the initial error message will be displayed.  </p>

  <p>You can customize this page using the CSRF_FAILURE_VIEW setting.</p>
</div>

</body>
</html>

**<__main__.Get instance at 0x7f052c4e00e0>**

通过使用

print (request.sendData)

您只是为 sendData().

打印 方法定义

为了打印数据,你只需要使用print (request.data) 因为您在 class 方法中定义了它。

编辑:

让我们看看您在第二种 __init__() 方法中做了什么。

def __init__(self):
   1- data = urllib.urlencode({"contains":"silabeador"})   
   2- u = urllib.urlopen('http://localhost:8000/login/', data)
   3- print(u.read())

1- 您正在编码数据

2- 您正在打开 url

3- 您正在阅读 url 并打印它。输出是 html 页。

然后接下来,在这一行

request=Get()

您正在创建一个 Get 实例并将其分配给 request,接下来,您正在打印 request,这是一个对象引用。

所以您只想打印页面内容? 您可以:

1- 删除 print request

2- 将您的方法更改为:

def __init__(self):
        data = urllib.urlencode({"contains":"silabeador"})   
        u = urllib.urlopen('http://localhost:8000/login/', data)
        self.data = u.read() #assign the page content to an attribute

request = Get()
print request.data #print the data attribute.