1
我想使用@classmethod
,但我不想用它污染實例的命名空間。如果我有一個類方法for_classes_only
,我該如何阻止實例獲取它?不想讓實例看到Python @classmethod
class MyThing(object):
def __init__(self, this=None):
self.this = this
@classmethod
def for_classes_only(cls):
print "I have a class {}".format(cls)
thing = MyThing(this='that')
這是偉大的:
>>> MyThing.for_classes_only()
I have a class <class '__main__.MyThing'>
這是煩人:
>>> thing.for_classes_only
<bound method type.for_classes_only of <class '__main__.MyThing'>>
*一個類上的所有*都可以在實例上訪問。它不*活*,它是當實例本身不存在屬性時Python會查看類。如果你不想讓實例看到它,可以在類之外使用一個函數*。當然你必須明確地傳入類,因爲它不會被綁定。 – 2014-12-18 22:18:07
所以「類方法」僅僅意味着該方法接收該類,而不是該方法僅限於該類。得到它了。 – jkmacc 2014-12-18 22:30:29
您無法隱藏它,但可以根據類是否已實例化來改變其行爲,例如,通過在'__init__'中設置一個標誌。 – 101 2014-12-18 23:07:36