【问题标题】:Getting a NameError for a variable I have defined in my Class为我在我的类中定义的变量获取 NameError
【发布时间】:2020-01-03 20:14:10
【问题描述】:

我正在尝试运行一些代码,允许我从我称为 Master_programmer 的类中调用名称 Student 或 Programmer。这是我使用的代码。


class Master_programmer:

    capabilities = []
    student = "SoloLearn Student"
    programmer = "Programmer"

    def Student(self): 
        return 'SoloLearn Student'


    def Programmer(self): 
        return 'Programmer'

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

    def add_capabilities(self, capability):
        self.capabilities.append(capability)


m1 = Master_programmer(programmer)
print(m1.Student, m1.Programmer)

a.add_capabilities('Stay Inspired')
b.add_capabilities('Find Clients')
b.capability

运行上述代码后,出现以下错误

Traceback (most recent call last):
  File "./Playground/file0.py", line 21, in <module>
    m1 = Master_programmer(programmer)
NameError: name 'programmer' is not defined

现在,我的问题是,如何让我的代码提供预期的结果?例如,当我请求调用名称“程序员”时,我希望它会调出程序员,然后允许我向程序员添加功能,例如“查找客户”。对于学生来说,它必须是“保持灵感”。

【问题讨论】:

  • 您显示的代码不会产生该错误
  • 你说得对,让我更新一下。
  • 我已经更新了代码。有什么想法吗?
  • 变量 programmer 直到您实例化对象后才存在,但您试图在创建对象时将其传递给 init
  • 也不清楚为什么你有类属性 studentprogrammer 以及似乎只是返回它们的值的方法。

标签: python class nameerror


【解决方案1】:

我猜下面的代码和它的 cmets 会回答你的问题。

class Master_programmer:
    STATIC_VARIABLE_ONE_FOR_EVERY_INSTANCES = 'This is Static Var'
    def __init__(self, name):
        self.name = name
        self.capabilities = []
        self.student = "SoloLearn Student"
        self.programmer = "Programmer"

    def get_student(self): 
        return self.student

    def get_programmer(self): 
        return self.programmer

    def add_capabilities(self, capability):
        self.capabilities.append(capability)

# Create instance for your class and name it coder (or whatever you like)
coder = Master_programmer('Replace me with student name')

# to call coder object's variable 
# you need to call it by object name just like below
print('capabilities: ', coder.capabilities)
print(coder.programmer)
print(coder.student)
coder.add_capabilities('Stay Inspired')
coder.add_capabilities('Find Clients')
print(coder.get_student())
print(coder.get_programmer())
print('capabilities: ', coder.capabilities)
print()

# you can invoke Static variables usign directly class name
# you can invoke usign instance name as well but, it is not convention
print(Master_programmer.STATIC_VARIABLE_ONE_FOR_EVERY_INSTANCES)
print()

# if you change Static member, it will get change for all of your instances
coder_2 = Master_programmer('Replace me with student name')
Master_programmer.STATIC_VARIABLE_ONE_FOR_EVERY_INSTANCES = 'changed'
print()

# print static var using both ways
print(Master_programmer.STATIC_VARIABLE_ONE_FOR_EVERY_INSTANCES)
print(coder.STATIC_VARIABLE_ONE_FOR_EVERY_INSTANCES)
print(coder_2.STATIC_VARIABLE_ONE_FOR_EVERY_INSTANCES)

【讨论】:

  • 这是一个很好的答案,但不要使用吸气剂。他们没有任何目的
【解决方案2】:
m1 = Master_programmer(programmer)
print(m1.Student, m1.Programmer)

如果你想在Master_programmer 类中引用programmer = "Programmer",则调用变量programmer,你需要改用Master_programmer.programmer

虽然如果您不初始化 ab,您的代码稍后会崩溃,因为您也需要像 normal 变量一样定义它们,例如a = Master_programmer("EEZi") 给他们打电话和/或与他们合作

【讨论】:

    【解决方案3】:

    谢谢大家的回答。这是我使用的最终代码,它运行得非常好。非常感谢你。

    class Master_programmer:
        STATIC_VARIABLE_ONE_FOR_EVERY_INSTANCES = 'This is Static Var'
        def __init__(self, name):
            self.name = name
            self.capabilities = []
            self.student = "SoloLearn Student"
            self.programmer = "Programmer"
    
        def get_student(self): 
            return self.student
    
    
        def get_programmer(self): 
            return self.programmer
    
    
        def add_capabilities(self, capability):
            self.capabilities.append(capability)
    
    
    
    
    coder = Master_programmer('EEZi')
    
    
    coder.add_capabilities('Stay Inspired!')
    coder.add_capabilities('Find Clients')
    
    a = coder.get_student()
    b = coder.get_programmer()
    capabilities = coder.capabilities
    
    
    for i in range(0,1):
        print(a)
        print("Listen here, just", coder.capabilities[0], "\n")
        print(b)
        print("Hustle hard and", coder.capabilities[1])
    
    

    【讨论】:

      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2021-01-04
      相关资源
      最近更新 更多