Q值。我应该如何将 常量 参数传递给Python基类?
使用典型示例,我有类Dog
和Animal
(都来自x.sound
)。
致电"meow"
应该返回相应的字词"woof"
,sound
)。
我的问题是该类的所有实例都发出相同的声音,因此我可以将Animal
传递给class Animal:
def __init__( sound ):
self.sound = sound
class Dog:
def __init__():
super().__init__( "woof" )
:
"woof"
这似乎很浪费,因为我们在每个实例中存储class Animal:
@staticmethod
def sound():
raise NotImplementedError("Abstract")
class Dog:
@staticmethod
def sound():
return "woof"
,而且我有一百万只狗和十亿只猫。我可以用一种方法代替:
Bird
但是现在,由于我的动物都非常安静,当其他人出现并且在没有阅读我精心编写的文档的情况下编写Animal
课程时很容易错过,并且只发现他们忘记了一次蓝色的方法实际调用方法时的月亮。
理想情况下,我喜欢像C ++这样的模板,其中template<sound>
class Animal()
. . .
类本身采用参数 - 它不会错过而不会立即出错,并且每个实例不会占用更多空间。
def stringBuilder(array, xLine, yLine):
StringA, StringB = "", ""
i, j = len(xLine), len(yLine)
minCost = array[i][j]
while (i != 0 and j != 0):
minCost = min(array[i - 1][j], array[i][j - 1], array[i - 1][j- 1])
if (minCost == array[i - 1][j - 1]):
StringA += xLine[i - 1]
StringB += yLine[j - 1]
array[i - 1][j - 1] = 0
i -= 1
j -= 1
elif (minCost == array[i][j - 1]):
StringA += '-'
StringB += yLine[j - 1]
array[i][j - 1] = 0
j -= 1
elif (minCost == array[i - 1][j]):
StringA += xLine[i - 1]
StringB += '-'
array[i - 1][j]= 0
i -= 1
有没有办法在Python中完成我以后的工作?
答案 0 :(得分:0)
您可以尝试使用工厂设计模式。像这样:
pointer
上面的代码产生以下输出
class AnimalFactory(object):
animals={}
@staticmethod
def registerAnimal(animalName, animalClass):
if not hasattr(animalClass, "sound"):
raise Exception("All animals need to make a sound")
AnimalFactory.animals[animalName]=animalClass
@staticmethod
def createNewAnimal(animalName):
return AnimalFactory.animals[animalName]()
class Dog:
sound="woof"
AnimalFactory.registerAnimal("dog", Dog)
dog1=AnimalFactory.createNewAnimal("dog")
print dog1.sound
class Cat:
pass
AnimalFactory.registerAnimal("cat", Cat)
当然,用户可能忘记注册课程,但只要其他用户使用woof
Traceback (most recent call last):
File "animals.py", line 25, in <module>
AnimalFactory.registerAnimal("cat", Cat)
File "animals.py", line 7, in registerAnimal
raise Exception("All animals need to make a sound")
创建新动物,这应该可行。