Python 我不知道';我不明白这两行代码之间的区别

Python 我不知道';我不明白这两行代码之间的区别,python,python-3.x,Python,Python 3.x,我用两种不同的方式编写了这段代码。只有第二个有效,但我不明白为什么 1: 2: 正如我在评论中所说的,我希望这个小代码能让您理解这个问题 class Person: def __init__(self, name): self.name = name def greet(self): pass Joe = Person("Joe") Joe.greet() Pet = Person("Pet").greet() print(Joe) pri

我用两种不同的方式编写了这段代码。只有第二个有效,但我不明白为什么

1:

2:


正如我在评论中所说的,我希望这个小代码能让您理解这个问题

class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        pass

Joe = Person("Joe")
Joe.greet()

Pet = Person("Pet").greet()

print(Joe)
print(Pet)
输出:

<__main__.Person object at 0x7f1020983080>
None

没有一个

问题是
Frame
构造函数返回类型为
Frame
的对象,而
grid
方法不返回任何内容。这就是为什么会出现
NoneType
错误。

正如我在评论中所说的,我希望这段小代码能让您了解问题所在

class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        pass

Joe = Person("Joe")
Joe.greet()

Pet = Person("Pet").greet()

print(Joe)
print(Pet)
输出:

<__main__.Person object at 0x7f1020983080>
None

没有一个
问题是
Frame
构造函数返回类型为
Frame
的对象,而
grid
方法不返回任何内容。这就是为什么出现
NoneType
错误。

这是:

buttons = Frame(calculator, bg="green", width=200, height=400).grid()
  • 创建一个
    对象
  • 对其调用
    .grid()
  • 将调用
    .grid()
    的结果绑定到名称
    按钮
  • 丢弃
    对象
  • 而这:

    buttons = Frame(calculator, bg="green", width=200, height=400)
    buttons.grid()
    
  • 创建一个
    Frame()
    对象并将其绑定到名称
    按钮
  • 调用
    Frame()
    对象上的
    .grid()
    ,并放弃此调用的结果
  • 所以这两个片段显然是不同的。在第一个中,
    按钮
    是返回的
    Frame().grid()
    对象(实际上似乎是
    ),在第二个中,
    按钮
    Frame()
    对象

    如果要分解第一条语句,则需要一个中间变量(而不是
    按钮
    )来引用
    Frame()
    对象,并对该变量调用
    grid()

    frame = Frame(calculator, bg="green", width=200, height=400)
    buttons = frame.grid()
    
    这:

  • 创建一个
    对象
  • 对其调用
    .grid()
  • 将调用
    .grid()
    的结果绑定到名称
    按钮
  • 丢弃
    对象
  • 而这:

    buttons = Frame(calculator, bg="green", width=200, height=400)
    buttons.grid()
    
  • 创建一个
    Frame()
    对象并将其绑定到名称
    按钮
  • 调用
    Frame()
    对象上的
    .grid()
    ,并放弃此调用的结果
  • 所以这两个片段显然是不同的。在第一个中,
    按钮
    是返回的
    Frame().grid()
    对象(实际上似乎是
    ),在第二个中,
    按钮
    Frame()
    对象

    如果要分解第一条语句,则需要一个中间变量(而不是
    按钮
    )来引用
    Frame()
    对象,并对该变量调用
    grid()

    frame = Frame(calculator, bg="green", width=200, height=400)
    buttons = frame.grid()
    

    是一样的!,你也能做到

    buttons = Frame(calculator, bg="green", width=200, height=400).grid().columnconfigure(0)
    

    每行可以使用多种方法

    都是一样的!,你也能做到

    buttons = Frame(calculator, bg="green", width=200, height=400).grid().columnconfigure(0)
    

    每行可以使用多个方法

    ,因为必须首先基于类框架创建对象,然后在该对象上运行方法grid(),而不是在类框架上?顺便说一下,我不知道你的代码应该做什么,只是猜测而已。您的错误消息是什么?'NoneType'对象没有属性'columnconfigure'@KatiaPunter非常准确我相信可能是因为.grid()不返回任何值这里的问题是第一个代码段上的
    按钮是
    grid
    函数的返回,而在第二种情况下,
    Frame
    构造函数返回的是
    Frame
    对象。顺便说一句,如果
    grid
    将返回
    self
    ,那么您可以这样做。因为您必须首先基于类框架创建一个对象,然后在该对象上运行方法grid(),而不是在类框架上?顺便说一下,我不知道你的代码应该做什么,只是猜测而已。您的错误消息是什么?'NoneType'对象没有属性'columnconfigure'@KatiaPunter非常准确我相信可能是因为.grid()不返回任何值这里的问题是第一个代码段上的
    按钮是
    grid
    函数的返回,而在第二种情况下,
    Frame
    构造函数返回的是
    Frame
    对象。顺便说一句,如果
    grid
    将返回
    self
    ,那么您将被允许这样做。是的,我得到了!好的,我明白了!Thansk a lotbuttons=Frame(calculator,bg=“green”,width=200,height=400).grid().columnconfigure(0)错误:“非类型”对象没有属性“columnconfigure”我不知道我为什么要对此进行投票。。。抱歉,这是错误的,它的作用与第一个代码片段相同,在任何
    grid()
    中调用
    columnconfigure()
    都会返回恰好是
    None
    。buttons=Frame(calculator,bg=“green”,width=200,height=400)。grid()。columnconfigure(0)错误:“非类型”对象没有属性“columnconfigure”我不知道我为什么要对此进行投票。。。很抱歉,这是错误的,它与第一个代码片段的操作相同,在
    grid()
    中调用
    columnconfigure()
    ,返回的值恰好是
    None