我正在做CS224N的sizgment.in函数 test_word2vec
,有一些python语法我不明白:
""" Interface to the dataset for negative sampling """
dataset = type('dummy', (), {})()
def dummySampleTokenIdx():
return random.randint(0, 4)
def getRandomContext(C):
tokens = ["a", "b", "c", "d", "e"]
return tokens[random.randint(0,4)],
[tokens[random.randint(0,4)] for i in xrange(2*C)]
dataset.sampleTokenIdx = dummySampleTokenIdx
dataset.getRandomContext = getRandomContext
问题一: dataset = type('dummy', (), {})()
是什么意思?
问题第二:在dataset.sampleTokenIdx = dummySampleTokenIdx
中,我认为dataset
没有属性sampleTokenIdx
。那么,数据集为什么可以调用它?
- 带有3个参数的类型函数创建一个类。因此,这将等同于此代码:
class dummy(object):
pass
- 在Python中,您可以随时将属性添加到对象。如果尚未存在,它将被创建,从本质上插入代表对象属性的dict中。