Python 获取我在类中定义的变量的NameError

Python 获取我在类中定义的变量的NameError,python,class,nameerror,Python,Class,Nameerror,我试图运行一些代码,允许我从我称为Master_Programmer的类中调用Student或Programmer的名称。这是我使用的代码 class Master_programmer: capabilities = [] student = "SoloLearn Student" programmer = "Programmer" def Student(self): return 'SoloLearn Student' d

我试图运行一些代码,允许我从我称为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

回溯(最近一次呼叫最后一次):
文件“/playerd/file0.py”,第21行,在
m1=主程序设计器(程序设计器)
NameError:未定义名称“程序员”

现在,我的问题是,如何让我的代码交付预期的结果?e、 g当我请求调用“程序员”这个名字时,我希望它能带来程序员,然后允许我向程序员添加诸如“查找客户机”之类的功能。对于学生来说,它必须是“保持灵感”。

我想下面的代码及其注释将回答您的问题

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)
m1=Master\u编程器(编程器)
打印(m1.学生,m1.程序员)
正在调用变量
programmer
,如果您想引用
Master\u programmer
类中的
programmer=“programmer”
,则需要改用
Master\u programmer.programmer


虽然如果您不初始化
a
b
,您的代码稍后会崩溃,因为您需要像普通变量一样定义它们,例如
a=Master_programmer(“EEZi”)
调用它们和/或使用它们

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

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])


您显示的代码没有产生那个错误您是对的,请允许我更新它。我已经更新了代码。有什么想法吗?变量
programmer
在实例化对象之后才存在,但是,当您创建对象时,您试图将其传递到
init
,也不清楚为什么您有类属性
student
programmer
以及似乎只返回其值的方法。这是一个很好的答案,但不要使用getter。它们毫无用处