Advertisement
Guest User

Untitled

a guest
Apr 16th, 2014
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.64 KB | None | 0 0
  1. class MyDescriptorClass(object):
  2. def __init__(self, owner, name, activates = 0):
  3. self.value = None
  4. self.name = name
  5. self.owner = owner
  6. self.activates = 0
  7. self.connects = []
  8.  
  9. def __set__(self, obj, val):
  10. self.set(val)
  11. def __get__(self, instance, owner):
  12. return self.value
  13.  
  14. def set(self, value):
  15. if self.value == value:
  16. return 0
  17. self.value = value
  18. if self.activates:
  19. self.owner.evaluate()
  20.  
  21. def connect(self, inputs):
  22. if not isinstance(inputs, list):
  23. inputs = list(inputs)
  24. for input in inputs:
  25. self.connects.append(input)
  26.  
  27. class ParentClass(object):
  28. def __init__(self, name):
  29. self.states = {}
  30. self.name = name
  31. self.A = MyDescriptorClass(self, name, activates = 1)
  32. self.B = MyDescriptorClass(self, name, activates = 1)
  33. self.states.setDefault('A', self.A)
  34. self.states.setDefault('B', self.B)
  35.  
  36. class ChildClass1(ParentClass):
  37. def __init__(self, name)
  38. super(ChildClass1, self).__init__(name)
  39. self.ans = None
  40. def evaluate(self):
  41. self.ans = self.A.value + self.B.value
  42.  
  43. class ChildClass2(ParentClass):
  44. def __init__(self, name)
  45. super(ChildClass1, self).__init__(name)
  46. self.ans = None
  47. def evaluate(self):
  48. self.ans = self.A.value * self.B.value
  49.  
  50. class ParentClass(object):
  51. A = MyDescriptorClass() # here I am unable to pass the owner
  52.  
  53. c = ChildClass1("c1")
  54. c.A = 10 # I directly want to set this value instead of using c.A.set(10)
  55. c.B = 20
  56. c.evaluate()
  57. print c.ans # 30
  58. c.B = 40
  59. print c.ans # 50
  60.  
  61. class MyDescriptorClass(object):
  62. def __init__(self, activates = 0):
  63. self.value = None
  64. self.activates = activates
  65. self.connects = []
  66.  
  67. def __set__(self, instance, val): # 1
  68. if self.value == val:
  69. return 0
  70. self.value = val
  71. if self.activates:
  72. instance.evaluate()
  73. def __get__(self, instance, instcls): # 1
  74. return self.value
  75.  
  76. class GateInput(object):
  77. def __init__(self, index):
  78. self.index = index # 4
  79.  
  80. def __get__(self, inst, instcls):
  81. return inst.inputs[self.index].ans # 5
  82.  
  83. def __set__(self, inst, val):
  84. if isinstance(val, (float, int)):
  85. inst.inputs[self.index] = Constant(val)
  86. else:
  87. inst.inputs[self.index] = val
  88.  
  89.  
  90. class Constant(object):
  91. def __init__(self, val):
  92. self.ans = val
  93.  
  94.  
  95. class Gate(object):
  96. A = GateInput(0) # 1
  97. B = GateInput(1) # 1
  98.  
  99. def __init__(self, name):
  100. self.name = name
  101. self.inputs = [Constant(0), Constant(0)] # 2
  102.  
  103.  
  104. class Adder(Gate):
  105. @property
  106. def ans(self):
  107. result = 0
  108. for gate in self.inputs:
  109. result += gate.ans # 3
  110. return result
  111.  
  112.  
  113. class Multiplier(Gate):
  114. @property
  115. def ans(self):
  116. result = 1
  117. for gate in self.inputs:
  118. result *= gate.ans
  119. return result
  120.  
  121. b = Multiplier('b1')
  122. b.A = 2
  123. b.B = 3
  124. print(b.A)
  125. # 2
  126. print(b.ans)
  127. # 6
  128.  
  129. c = Adder('c1')
  130. c.A = 10
  131. print(c.ans)
  132. # 10
  133.  
  134. # This connects output of b to an input of c
  135. c.B = b
  136. print(c.ans)
  137. # 16
  138.  
  139. class MyDescriptorClass(object):
  140. def __init__(self):
  141. self.data = defaultDict(dict)
  142. def configure(self, owner, name, activates = 0):
  143. container = self.data(id(owner))
  144. container["value"] = None
  145. container["name"] = name
  146. ...
  147.  
  148. def __set__(self, owner, value):
  149. # implemnt your previous "set" method straight here
  150. ...
  151. ...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement