回覆列表
-
1 # 手機使用者85407945079
-
2 # 使用者4522173778936
class BaseObject(object):
def __init__(self, **kwg):
self.__dict__ = dict(kwg)
content = """Tim.Wang|M|43
Bruce.Wang|M|38
Amay.Song|F|21"""
def ln2obj(ln):
name,sex,age = ln.split("|")
return BaseObject(name=name,sex=sex,age=int(age))
students = map(ln2obj, content.splitlines())
先講下基本概念,你所說的未初始化的類,我把它叫做類物件,初始化的類叫例項物件。
類物件中有個字典,存了class域下的所有函式物件。
其中,把一個函式用@classmethod修飾後,這個函式就變成了類方法,在類物件生成的時候就例項化了,並傳入了一個引數,一般這個引數引數名為cls。
把一個函式用@staticmethod修飾後,這個函式也是類的靜態方法,只不過不會預設傳一個cls引數。
如果不用上述裝飾器修飾,這個函式就是類的例項方法,會預設傳一個引數,這個引數往往命名為self。
而這個self,需要__init__函式執行一下,才會傳給例項方法,這就是初始化。
不過,python是動態語言,上述規則基本上靠約定俗成,直譯器中沒有很強的約束。
硬是要歸類的化,你這裡的不帶引數的方法,應該歸到staticmethod裡面,在實際使用時應該加上一個修飾符,約定這是一個staticmethod。
至於這個方法有什麼用呢?實際上沒什麼大用,classmethod是必須的,而staticmethod不是必須的。
我只是在把class當作用域用的時候或把class當字典用的時候,用過這個方法。