该__enter__方法的返回值不应该self始终是。
Python文档说:
object.__enter__(self)输入与此对象相关的运行时上下文。with语句会将此方法的返回值绑定到该语句的as子句中指定的目标(如果有)。
这样做,为了做任何实际的事情,不self应该总是从__enter__类的方法中返回它,否则,就不能从上下文中调用其他类方法。
例如,在下面的代码中,s.main()可以正常工作,但b1.main()会出错。
class a(object):
def __init__(self):
pass
def __enter__(self):
return self
def __exit__(self ,type, value, traceback):
return self
def main(self):
print " in a::main self %d " , id(self)
class b(object):
def __init__(self):
pass
def __enter__(self):
return "something else"
def __exit__(self ,type, value, traceback):
pass
def main(self):
print "in b::main !! self id " , id(self)
with a() as s:
s.main()
with b() as b1:
b1.main()
s …Run Code Online (Sandbox Code Playgroud) 我知道__del__Python 类的函数并没有像许多人期望的那样被处理:作为析构函数。
我还了解到,有更多“Pythonic”并且可以说是更优雅的整理方法,特别是使用with 构造。
然而,当编写可能被不太熟悉 python 方式的读者使用的代码时,当清理很重要时,是否有一种优雅的方法可以让我简单地__del__可靠地作为析构函数工作,而不干扰 python 的自然使用__del__?
作为析构函数的期望__del__似乎并非不合理,同时也很常见。所以我只是想知道是否有一种优雅的方式让它按照预期工作——忽略关于它的 Python 优点的许多争论。
我正在研究一个实现上下文管理器的类似连接的对象。强烈鼓励写这样的东西:
with MyConnection() as con:
# do stuff
Run Code Online (Sandbox Code Playgroud)
当然也可以这样做:
con = MyConnection()
# do stuff
con.close()
Run Code Online (Sandbox Code Playgroud)
但未能关闭连接是相当有问题的。所以关闭__del__()似乎是一个好主意:
def __del__(self):
self.close()
Run Code Online (Sandbox Code Playgroud)
这看起来很不错,但有时会导致错误:
Exception ignored in: [...]
Traceback (most recent call last):
File "...", line xxx, in __del__()
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)
看起来好像有时 close 方法已经被销毁,当__del__()被调用时。
所以我正在寻找一种很好的方法来鼓励 python 在破坏时正确关闭连接。如果可能的话,我想,以避免代码重复close()和__del__()
所以我是一个新手但是正在使用flask/MYSQL中的注册系统表单
我收到此错误(UnboundLocalError:赋值前引用的局部变量'cursor')
经过几个小时的代码和研究,我需要你的帮助.
这是我的档案,如果我需要分享其他任何内容,请告诉我.谢谢
from flask import Flask, render_template, json, request
from flask.ext.mysqldb import MySQL
from werkzeug import generate_password_hash, check_password_hash
app = Flask(__name__)
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'x'
app.config['MYSQL_DATABASE_PASSWORD'] = 'x'
app.config['MYSQL_DATABASE_DB'] = 'x'
app.config['MYSQL_DATABASE_HOST'] = 'x'
mysql.init_app(app)
@app.route('/')
def main():
return render_template('index.html')
@app.route('/login')
def login():
return render_template('login.html')
@app.route('/showSignUp')
def showSignUp():
return render_template('signup.html')
@app.route('/signUp',methods=['POST','GET'])
def signUp():
try:
_name = request.form['inputName']
_email = request.form['inputEmail']
_password = request.form['inputPassword']
# validate the received values
if _name and _email and _password:
# All …Run Code Online (Sandbox Code Playgroud) 我想在一个类中使用ConfigParser,它需要来自析构函数的调用,但随后会发生奇怪的事情.
这是我的代码:
"""
function name is
test ok!
test1 failed!
test2 failed!
test3 failed!
test4
... ok!
"""
def test3():
pass
class Class1:
def __del__(self):
test3()
if __name__=="__main__":
obj=Class1()
Run Code Online (Sandbox Code Playgroud)
如果函数被命名test1,test2或者test3,将引发异常,我无法捕获它try except.
追溯是:
E:\tc.py
Exception TypeError: "'NoneType' object is not callable" in <bound method Class1.__del__ of <__main__.Class1 instance at 0x00C18F58>> ignored
Run Code Online (Sandbox Code Playgroud)
太奇怪了!你能在你的系统中测试它吗?或者我做错了什么?
我有类似的东西:
a = [instance1, instance2, ...]
Run Code Online (Sandbox Code Playgroud)
如果我做了
del a[1]
Run Code Online (Sandbox Code Playgroud)
instance2从列表中删除,但是实例2的析构函数方法是否被调用?
我对此感兴趣,因为我的代码使用了大量内存,我需要释放内存从列表中删除实例.
python ×6
destructor ×1
flask ×1
list ×1
mysql ×1
mysql-python ×1
python-2.7 ×1
python-3.x ×1
sqlalchemy ×1