com*_*mte 5 python oop python-3.x
我有一个映射数据库对象的类
class MyObj:
def __init__(self):
...SQL request with id as key...
if len(rows) == 1:
...maps columns as my_obj attributes...
self.exists = True
else:
self.exists = False
Run Code Online (Sandbox Code Playgroud)
通过这样的设计,每次都会创建一个对象,并使用.exists属性检查它是否存在于数据库中.
my_obj = MyObj(id=15)
if my_obj.exists:
...do stuff...
Run Code Online (Sandbox Code Playgroud)
有用.
但我怀疑有一种更简洁的初始化方法,我们只需要检查:
my_obj = MyObj(id=15)
if my_obj:
...do stuff...
Run Code Online (Sandbox Code Playgroud)
您无法执行此操作__init__,因为该方法在创建新实例后运行.
但是,你可以这样做object.__new__(),这是为了首先创建实例.因为它通常应该返回该新实例,所以您也可以选择返回其他内容(例如None).
你可以像这样使用它:
class MyObj:
def __new__(cls, id):
# ...SQL request with id as key...
if not rows:
# no rows, so no data. Return `None`.
return None
# create a new instance and set attributes on it
instance = super().__new__(cls) # empty instance
instance.rows = ...
return instance
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1752 次 |
| 最近记录: |