我正在遵循this Python Design模式,对于initialize()函数,我有些不了解:
class ObjectFactory:
""" Manages prototypes.
Static factory, that encapsulates prototype
initialization and then allows instatiation
of the classes from these prototypes.
"""
__type1Value1 = None
__type1Value2 = None
__type2Value1 = None
__type2Value2 = None
@staticmethod
def initialize():
ObjectFactory.__type1Value1 = Type1(1)
ObjectFactory.__type1Value2 = Type1(2)
ObjectFactory.__type2Value1 = Type2(1)
ObjectFactory.__type2Value2 = Type2(2)
为什么变量的init使用类的名称(即ObjectFactory.__type1Value1
)而不使用self(即self.__type1Value1
)?
当我改变自我时:
def initialize(self):
self.__type1Value1 = Type1(1)
self.__type1Value2 = Type1(2)
self.__type2Value1 = Type2(1)
self.__type2Value2 = Type2(2)
我收到错误消息TypeError: initialize() missing 1 required positional argument: 'self'
。
但是在另一个示例中,使用“ self”有效:
class Geek:
# Variable defined inside the class.
inVar = 'inside_class'
print("Inside_class2", inVar)
def access_method(self):
self.inVar="a"
print("Inside_class3", self.inVar)
uac = Geek()
uac.access_method()
输出:
Inside_class2 inside_class
Inside_class3 a
我想念什么?
答案 0 :(得分:2)
在查找属性值时,如果没有名为self.foo
的实例属性,则type(self).foo
会退回到foo
。
但是,当设置一个值时,self.foo
将始终更新(或在必要时创建)实例属性。您必须显式引用该类才能修改类属性。
在您的另一个示例中,self
在您验证了inVar
的新实例属性uac
的值的情况下“有效”。类属性Geek.inVar
保持不变。