在Python中将类导入另一个类

Eve*_*ing -1 python import tkinter python-3.x

因为我还在学习python,所以我遇到了一个问题.

为什么这样做:

class SomeOtherClass(object):
    def __init__(self):
        self.number = 10
        print(self.number)

    def increase(self):
        self.number += 1
        print(self.number)

class MyMainClass(object):
    def __init__(self):
        self.otherClass = MyClass()

app = MyMainClass() #Output: 10
app.otherclass.increase() #Output: 11
Run Code Online (Sandbox Code Playgroud)

但这不是:

from tkinter import *

class MyMainClass(object):
    def __init__(self):
        self.tk = Tkinter() # <-- Error: see below.

app = MyMainClass()
app.tk.title("My window")
...
Run Code Online (Sandbox Code Playgroud)

两次我都包括一个类,但在第二个例子中它说:

NameError:未定义全局名称"Tkinter"

这些示例之间的区别在哪里,我如何解决这个问题,所以我能在课堂上使用tkinter?

谢谢你的帮助.

Eri*_*lun 5

也许你的意思Tk()tkinterPython 3.x上的模块似乎不包含类Tkinter.

关于你的问题和例子的含义......好吧,这些例子绝对无关紧要,问题应该只是"为什么我不能创建一个实例Tkinter"或者什么.

Python课程:这也是一个很好的例子,说明为什么使用星形导入是一个坏主意(即from <module> import *,因为*看起来像一个星星).这会导入所有内容tkinter,但不会让您知道您认为其中的内容实际上是否存在

from tkinter import *
Run Code Online (Sandbox Code Playgroud)

而这个

from tkinter import Tkinter
Run Code Online (Sandbox Code Playgroud)

会立即指出(班级)Tkinter不存在tkinter.一些人似乎更喜欢的另一种选择(包括我自己在某些情况下),import tkinter接下来是tkinter.Tk(),其优点在于一个类来自何处.此外,PEP8还不鼓励使用星级进口(将其称为"通配符进口").

  • 你知道......*"哇,谢谢"*直接翻译成StackOverflow'ese为*"接受"*;) (2认同)
  • `import tkinter as tk`.那么至少你不需要在所有事情之前输入所有`tkinter`. (2认同)