gpt4 book ai didi

python - 不希望实例看到 Python @classmethod

转载 作者:行者123 更新时间:2023-12-01 04:55:22 27 4
gpt4 key购买 nike

我想使用@classmethod,但我不想用它污染实例的命名空间。如果我有一个类方法 for_classes_only,如何防止实例获取它?

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'>>

最佳答案

尝试使用metaclass :

class Meta(type):
# There is *NO* @classmethod decorator here
def my_class_method(cls):
print "I have a class {}".format(cls)

class MyThing(object):
__metaclass__ = Meta
def __init__(self, this=None):
self.this = this

这是比大多数人需要或想要的更重的魔法,所以只有当你真的很确定你需要它时才这样做。大多数时候,普通的@classmethod就足够了。

关于python - 不希望实例看到 Python @classmethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27556679/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com