【问题标题】:Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'p1' is not defined追溯(最近调用最后):文件 \"<stdin>\",第 1 行,在 <module> NameError: name \'p1\' is not defined
【发布时间】:2022-11-27 01:18:37
【问题描述】:
class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

p1 = Person("John", 36)

print(p1)

我粘贴了来自 w3school 的代码,我知道为什么它不起作用。

【问题讨论】:

  • 回溯与您发布的代码不匹配。
  • 此代码确实定义了一个名为p1 的变量。所以你的真实代码一定是不同的。
  • 您是否尝试从您的真实代码中的另一个文件导入p1
  • 欢迎来到堆栈溢出!请拍tour。此代码不会产生该错误,即使我像您一样将其复制粘贴到 REPL 中。无论如何,SO 是一个问答网站,那么您的问题到底是什么?查看How to Ask
  • 你说你粘贴它.如果您将它粘贴到 Python 终端(终端、cli、解释器、repl...),我怀疑它可能会因为没有选择正确的缩进(它们是非常在 Python 中很重要)。您是否尝试过将完全相同的代码复制到一个文件中(称为...不知道...类似于myfile.py),然后在常规终端中运行python3 myfile.pysee here

标签: python init


【解决方案1】:

您的错误与您的代码不匹配,但这并不重要,因为直接打印类不会打印它的属性,而无需进行一些修改。如果您只想打印属性,您可以将 __str__ dunder 方法添加到您的类中,并创建一个自定义字符串以返回。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def __str__(self):
        return f'name: {self.name}, age: {self.age}'

p1 = Person("John", 36)

print(p1) #name: John, age: 36

就个人而言,我更喜欢将 dataclasses 用于需要可打印表示或 json 结构的类。

from dataclasses import dataclass, asdict

@dataclass
class Person:
    name: str 
    age : int

p1 = Person("John", 36)

print(p1) #Person(name='John', age=36)

print(asdict(p1)) #{"name":"John", "age":36}

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2019-04-01
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2022-10-13
    • 2019-10-27
    相关资源
    最近更新 更多