Python 获取我在类中定义的变量的NameError
我试图运行一些代码,允许我从我称为Master_Programmer的类中调用Student或Programmer的名称。这是我使用的代码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
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。它们毫无用处