不理解Python中的这行代码?

时间:2013-10-23 14:14:07

标签: python class oop abstract-class

我正在阅读一些有经验的程序员编写的代码,我不明白它的某些部分。不幸的是,我是Python编程的新手。

这是令我困惑的代码行:

realworld = ConcreteRealWorldScheduler(RealWorldScenario(newscenario)).schedule()

概括我会再次重写

variable = OneConcreteClass(OneClass(anotherVariable)).method()

这部分最让我困惑的是:

(RealWorldScenario(newscenario))

如果有人能给我一个详尽的描述,那将非常有用。

谢谢

4 个答案:

答案 0 :(得分:4)

这与:

相同
# New object, newscenario passed to constructor
world_scenario = RealWordScenario(newscenario)
# Another new object, now world_scenario is passed to constructor
scheduler = ConcreteRealWorldScheduler(world_scenario)
# Call the method
variable = scheduler.method()

答案 1 :(得分:1)

由于命名或类的复杂性,它可能看起来令人困惑,但这基本上与以下内容相同:

foo = set(list('bar')).pop()

所以,在这个例子中:

  1. 首先使用list实例化'bar'
    • list('bar') == ['b', 'a', 'r']
  2. 接下来,从列表中创建一个集合
    • set(['b', 'a', 'r']) == {'a', 'b', 'r'}
  3. 然后我们使用set的{​​{1}}方法
    • pop()将返回{'a', 'b', 'r'}.pop()并将'a'保留为set
  4. 对于您给定的代码行也是如此:

    {'b', 'r'}
    1. 首先使用realworld = ConcreteRealWorldScheduler(RealWorldScenario(newscenario)).schedule()
    2. 实例化新的RealWorldScenario
    3. 接下来,使用newscenario实例
    4. 实例化ConcreteRealWorldScheduler
    5. 最后,调用RealWorldScenario实例的schedule()方法。

答案 2 :(得分:0)

从外部工作,我们有

variable = OneConcreteClass(OneClass(anotherVariable)).method()

variable = SomethingConfusing.method()

我们得出结论SomethingConfusing是一个名为method

的方法的对象

我们还知道什么? 嗯,这真的是

OneConcreteClass(OneClass(anotherVariable))

OneConcreteClass(SomethingElseConfusing)
因此,

OneConreteClass是一个具体的类,它在__init__方法中采用另一个对象,特别是类型为OneClass的已用OneClass(anotherVariable)

初始化的类型

有关详细信息,请参阅Dive into pythonhere

答案 3 :(得分:0)

在Python中,几乎所有内容都是Object

所以当我们为对象创建实例时,我们会这样做:

obj = ClassName()  # class itself an object of "Type"

或     obj = ClassName(Args)#这里args被传递给构造函数

如果您的班级有任何名为method()的成员

你可以这样做:

obj.method()

ClassName().method()