Python 从父级实例化子级
是否可以从父类实例化子类的实例,而无需专门传递子类的类名 在PHP中,我可以执行以下操作Python 从父级实例化子级,python,Python,是否可以从父类实例化子类的实例,而无需专门传递子类的类名 在PHP中,我可以执行以下操作 $instance = new static; 如何在Python中实现类似的结果 class DatabaseObject: @classmethod def findByID(caller, ID): query='SELECT * FROM {} LIMIT 1'.format(caller.tableName) #dostuff re
$instance = new static;
如何在Python中实现类似的结果
class DatabaseObject:
@classmethod
def findByID(caller, ID):
query='SELECT * FROM {} LIMIT 1'.format(caller.tableName)
#dostuff
return Instance(stuff) #return the instance of the class that called this method
class Question(DatabaseObject):
tableName='questions'
class Answer(DatabaseObject):
tableName='answers'
q = Question.findByID(5)
a = Answer.findByID(5)
所以在这个例子中,我希望findByID方法返回的是一个问题类或答案类的实例,具体取决于调用它的是哪一个
或者这种方法很可怕,不应该这样做
谢谢。因为提供给classmethod的第一个参数将是类本身,所以您可以使用
cls(stuff)
返回一个实例:
如果您只有一个classmethod
findByID
,那么定义问题当然会更直接。但是如果你也有其他的类方法,比如,findByExam
,findByCourse
,那么我认为你应该适当地使用类方法来创建其他的实例化途径。因为提供给类方法的第一个参数是类本身,你可以使用cls(stuff)
返回一个实例:
如果您只有一个classmethodfindByID
,那么定义问题当然会更直接。但是如果你也有其他的类方法,比如说,findByExam
,findByCourse
,那么我认为你应该适当地使用类方法来创建其他的实例化途径。你不需要在python中做任何特殊的事情
class DatabaseObject:
@classmethod
def findByID(self, ID):
# whatever
return self()
class Question(DatabaseObject):
tableName = 'questions'
class Answer(DatabaseObject):
tableName = 'answers'
print Question.findByID(5) # <__main__.Question instance at 0x109b1d638>
print Answer.findByID(5) # <__main__.Answer instance at 0x109b1d638>
类数据库对象:
@类方法
def findByID(自身,ID):
#随便
返回自我()
课堂问题(数据库对象):
tableName='questions'
类答案(数据库对象):
tableName='answers'
打印问题。findByID(5)#
打印答案。findByID(5)#
在python中,您不需要为此执行任何特殊操作
class DatabaseObject:
@classmethod
def findByID(self, ID):
# whatever
return self()
class Question(DatabaseObject):
tableName = 'questions'
class Answer(DatabaseObject):
tableName = 'answers'
print Question.findByID(5) # <__main__.Question instance at 0x109b1d638>
print Answer.findByID(5) # <__main__.Answer instance at 0x109b1d638>
类数据库对象:
@类方法
def findByID(自身,ID):
#随便
返回自我()
课堂问题(数据库对象):
tableName='questions'
类答案(数据库对象):
tableName='answers'
打印问题。findByID(5)#
打印答案。findByID(5)#
在@classmethod
s中使用cls
不是更惯用吗?@Eric:我不知道。真的吗?在@classmethod
s中使用cls
不是更惯用吗?@Eric:我不知道。真的吗?