[英]How do I programmatically create class methods in Python?
假設我想定義一個 Python class 其實例有幾個類似形式的成員:
class Bar:
def __init__(self):
self.baz=3
self.x=1
self.name=4
我可以使用__dict__
的顯式操作一次創建所有成員:
class Bar:
def __init__(self):
self.__dict__.update({name: len(name) for name in ("baz", "x", "name")})
但是,如果關聯成員是class數據成員,而不是實例成員,那么我知道沒有類似的方法來以編程方式改變Bar.__dict__
:
class Bar:
#Fails with "AttributeError: 'mappingproxy' object has no attribute 'update'"
Bar.__dict__.update({name: len(name) for name in ("baz", "x", "name")})
在 Javascript 中,以編程方式操作構造函數的屬性是可能的,因為構造函數只是普通函數,它們只是普通對象,因此只是將屬性映射到更多對象的可變字典。 是否可以在 Python 中編寫類似的代碼?
我猜你可以使用一個元類,一個基數 class 和__init_subclass__
或使用eval
來創建你的 class。下面是一個使用基數 class 的例子:
class Base:
attrs_to_set: set[str] = set()
def __init_subclass__(cls) -> None:
for attr in cls.attrs_to_set:
setattr(cls, attr, cls.get_attr_value(attr))
@classmethod
def get_attr_value(cls, attr_name: str):
# default, you can change it depending on your use case i guess.
return len(attr_name)
class Bar(Base):
attrs_to_set = {"x", "baz", "name"}
print(Bar.x, Bar.name, Bar.baz)
# prints: 1 4 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.