![](/img/trans.png)
[英]How to access parent class instance method from child class static method in python?
[英]Python: how to make a class method communicate with an instance method of a parent class
從理論上講,我了解 class 方法和實例方法之間的區別。 現在我有一個實際案例,我嘗試利用 class 方法。
基本上我有一個看起來像這樣的 mongodb 包裝器:
class Model(dict):
__getattr__ = dict.get
__delattr__ = dict.__delitem__
__setattr__ = dict.__setitem__
def create(self):
self.collection.insert(self)
這就是我使用它的方式:
class Document(Model):
collection = mongo.db.My_collection
x = Document({'Name': 'BOB', 'Age': 26})
x.create()
現在,我想利用 class 方法來避免實例化我的對象。 這是我選擇的方法:
class Document(Model):
collection = mongo.db.My_collection
@classmethod
def create_item(cls, item):
cls.create(item)
Document.create_item({'Name': 'BOB', 'Age': 26})
這里我繼承自Model
class。 然后我創建了一個 class 方法create_item
。 最后我嘗試調用父 class 的create
方法,但出現錯誤:
AttributeError: 'dict' object has no attribute 'collection'
所以我的問題是:
create
一個類方法
class Model(dict):
__getattr__ = dict.get
__delattr__ = dict.__delitem__
__setattr__ = dict.__setitem__
@classmethod
def create(cls,item):
#print(cls, cls.collection)
cls.collection.insert(item)
# MY mongo.db.collection
class F:
@staticmethod
def insert(item):
print(item)
class Document(Model):
#collection = mongo.db.My_collection
collection = F()
@classmethod
def create_item(cls, item):
cls.create(item)
>>> Document.create_item({'Name': 'BOB', 'Age': 26})
{'Name': 'BOB', 'Age': 26}
>>>
許多未知數來評論您為什么需要或想要以這種方式構建事物,但這只是我的意見。
似乎create
可能是與 class 無關的獨立function。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.