Python样式问题。
有时我会将类分配给变量,以便我可以在其他地方实例化它们,例如:
class GuitarItem():
pass
class SuperClass():
def get_instance(self):
return self.Item()
class SubClass(SuperClass):
Item = GuitarItem
class SubClass2(SuperClass):
Item = PianoItem
这是好风格吗?我错过了一种更惯用的方法吗?它让我担心,因为item
没有大写(因为它是一个变量)所以它看起来像一个方法调用。
更新:根据Hyperboreus的评论,我正在利用Item
,这对我来说也更为明智。否则这似乎绝对没问题。
答案 0 :(得分:2)
解决您的主要问题:
有时我会将类分配给变量,以便我可以实例化它们 别的(...)这是好风格吗?我错过了一种更惯用的方式 这样做?
Python的类(以及函数,方法,模块等)都是普通的对象,就像其他任何东西一样,是的,它是“好的风格”而不是,没有“更惯用的方式”。
它让我担心,因为item没有大写(因为它是一个变量)所以 它看起来像一个方法调用。
它实际上最终是一个方法调用(它调用元类的__call__
方法,后者又调用类的__new__
方法。另外FWIW你不关心item
是否实际上是一个类,任何可调用的返回预期对象都会(并且将会)工作,所以CamelCasing它没有任何意义。
答案 1 :(得分:1)
不太确定,但也许你正在寻找这些方面的东西。是的,为什么不在另一个范围内给一个类另一个名字。
#! /usr/bin/python3
class GuitarItem: pass
class PianoItem: pass
class SuperClass:
def makeItem (self): #or whatever you want to do with the Item class
return type (self).Item ()
class SubClass (SuperClass): Item = GuitarItem
class SubClass2 (SuperClass): Item = PianoItem
print (SubClass ().makeItem () )
print (SubClass2 ().makeItem () )
这将首先制作吉他,然后制作钢琴。
答案 2 :(得分:0)
我建议使用工厂方法模式,因为它与你所做的非常相似,业界知道这种模式。 http://en.wikipedia.org/wiki/Factory_method_pattern
class GuitarItem(): pass
class PianoItem(): pass
class SuperClass():
def __init__(self)
self.item_instance = self.new_item()
def new_item(self):
"""Explain why it should provide item."""
raise NotImplementedError("Subclass of SuperClass must provide new_item method")
class SubClass(SuperClass):
def new_item(self):
return GuitarItem()
class SubClass2(SuperClass):
def new_item(self):
return PianoItem()