最近在查阅代码,发现python有些奇怪的东西。按照自己理解记下笔记,以备需要时参考
class Problem:
def __init__(self, initial, goal=None):
self.initial = initial
self.goal = goal
def run(self):
print (self.initial(),self.goal)
class Air(Problem):
def __init__(self, initial, goal):
#self.state_map = initial.pos + initial.neg
Problem.__init__(self, self.initial_state_TF,goal=goal)
def initiala(self):
return 'abc’
a=Air(4,5)
a.run()
如果去掉problem后的__init__,运行程序,可以运行.run()但是所有初始化的参数不正确。所以继承时初始化被继承class的参数需要如此操作(最初学习时并没有碰到过如此问题的解释)
————————————————————————
然后是重头戏,python3貌似允许一种鬼畜的行为,实在找不到参考,只能自己试出来结果
class FluentState():
def __init__(self, pos_list, neg_list):
self.pos = pos_list
self.neg = neg_list
class Problem:
def __init__(self, initial, goal=None):
self.initial = initial
self.goal = goal
def run(self):
print (self.initial(),self.goal)
class Air(Problem):
def __init__(self, initial:FluentState, goal):
self.state_map = initial.pos + initial.neg
Problem.__init__(self, self.initial_state_TF,goal=goal)
def initiala(self):
return 'abc’
a=Air(FluentState([1,2], [3,4]), 5)
a.run()
感觉类似于->这种annotation。最讨厌3这种装x行为了。
关于->
class Air(Problem):
def __init__(self, initial:FluentState, goal):
self.state_map = initial.pos + initial.neg
Problem.__init__(self, self.initial_state_TF,goal=goal)
def initiala(self)->str:
return 'abc’
实际上->str毫无意义,写->int, ->list, 或者->Problem都可以,不会影响任何结果。但如果是随便输入的字符串,则会报错!
___________________________________
关于函数
def test(x,y,z):
def suma(x,y):return str(x+y*10)
def suba(x,y):return str(x-y*10)
return suma(x,y)+suba(x,y)+str(z)
print test(1,2,3)
才知道函数内部还可以嵌套函数,而且运行正确,mark一下