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