簡體   English   中英

在Python中,您可以提前聲明所有可用的實例變量嗎?

[英]In Python, can you declare all available instance variables ahead of time?

在Python中(我在這里說的是2,但也有興趣了解3)是否有一種方法可以預先定義要使用的所有實例變量(成員字段)的列表,即使用您自己的一個錯誤還沒有定義?

就像是

class MyClass(object):
    var somefield
    def __init__ (self):
        self.somefield = 4
        self.banana = 25      # error!

就像您在Java,C ++,PHP等中所做的一樣

編輯:

我想要這種東西的原因是盡早發現使用最初沒有設置的變量。 似乎一台短絨棉絨實際上會拾起這些錯誤,而無需任何額外的檢查,所以也許我的問題沒有解決...

為什么可以,可以。

class MyClass(object):
    __slots__ = ['somefield']
    def __init__ (self):
        self.somefield = 4
        self.banana = 25      # error!

但是請注意警告

您可以使用上面發布的答案,但是對於更“ pythonic”的方法,請嘗試下面列出的方法(鏈接到code.activestate.com)

為了將來參考,在我弄清楚如何鏈接到網站之前,這里是代碼:

def frozen(set):
    """Raise an error when trying to set an undeclared name, or when calling
       from a method other than Frozen.__init__ or the __init__ method of
       a class derived from Frozen"""
    def set_attr(self,name,value):
        import sys
        if hasattr(self,name):                                  #If attribute already exists, simply set it
            set(self,name,value)
            return
        elif sys._getframe(1).f_code.co_name is '__init__':     #Allow __setattr__ calls in __init__ calls of proper object types
            for k,v in sys._getframe(1).f_locals.items():
                if k=="self" and isinstance(v, self.__class__):
                    set(self,name,value)
                    return
        raise AttributeError("You cannot add attributes to %s" % self)
    return set_attr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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