Data Descriptors Beat the Instance Dict

class NonDataDesc:
    def __get__(self, obj, objtype=None):
        return "from non-data descriptor"

class DataDesc:
    def __get__(self, obj, objtype=None):
        return "from data descriptor"
    def __set__(self, obj, value):
        pass

class Example:
    nd = NonDataDesc()
    dd = DataDesc()

e = Example()
e.__dict__["nd"] = "instance value"
e.__dict__["dd"] = "instance value"

print(e.nd)
print(e.dd)

What do the two print calls output, in order?

A

from non-data descriptor, then instance value (the priority is the reverse of what the correct answer states)

B

instance value, then from data descriptor

C

instance value, then instance value (an instance's own dict always wins over a class-level descriptor)

D

from non-data descriptor, then from data descriptor (any descriptor on the class always overrides the instance dict)