是否有可能做這樣的事情:class ParentClassName(object): name = camel_case_to_underscore(cls.__name__)class ChildClassName(Parent): passassert Parent().name == "parent_class_name" assert Child().name == "child_class_name" assert Child.name == "child_class_name" assert getattr(Child, 'name') == "child_class_name" 我想創建一個類,其他類可以從中繼承并根據類名設置其名稱。在python 3中可能嗎?
2 回答

飲歌長嘯
TA貢獻1951條經驗 獲得超3個贊
你不需要它,它已經在那里了:
>>> class Parent(): pass
...
>>> class Child(): pass
...
>>> Parent.__name__
'Parent'
>>> Child.__name__
'Child'
>>>
但是,如果您真的出于不費心解釋的任何原因堅持自己滾動,則可以使用自定義元類:
def camel_case_to_underscore(name):
# your code here
class NamedType(type):
def __new__(meta, name, bases, attribs):
attribs["name"] = camel_case_to_underscore(name)
return type.__new__(meta, name, bases, attribs)
class Parent(metaclass=NamedType):
pass
class Child(Parent):
pass
添加回答
舉報
0/150
提交
取消