簡體   English   中英

Python:如何使 class 方法與父 class 的實例方法通信

[英]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'

所以我的問題是:

  • 如何使 class 方法與父 class 的實例方法通信?
  • 其次,使用 class 方法實現這些類的最佳策略是什么?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM