重用变量的困难
Difficulties with re-using a variable
这是我的代码的一部分:
class projet(object):
def nameCouche(self):
valLissage = float(ui.valLissage.displayText())
return (valLissage)
valCouche = nameCouche() # asks for a positional argument but 'self' doesnt work
def choixTraitement(self):
ui.okLissage.clicked.connect(p.goLissage)
def goLissage(self, valCouche):
if ui.chkboxLissage.isChecked():
print(valCouche) # result is False
os.system(r'"C:\Program Files\FME\fme.exe" D:\Stelios\..... --MAX_NUM_POINTS {0}'.format(valCouche))
所以我想在 goLissage
方法中使用 valCouche
但它不起作用。
我以为 valCouche
会有 valLissage
的参数,但它给出了 False 作为值。
我尝试了不同的替代方法,但仍然无效。
您必须在 __init__
方法(构造函数)中声明变量,然后在您的代码中使用它
例如:
class projet(object):
def __init__(self):
self.valCouche = ''
def nameCouche(self):
valLissage = float(ui.valLissage.displayText())
return (valLissage)
def choixTraitement(self):
ui.okLissage.clicked.connect(p.goLissage)
def goLissage(self, valCouche):
if ui.chkboxLissage.isChecked():
self.valCouche = self.nameCouche()
print(self.valCouche) # result is False
os.system(r'"C:\Program Files\FME\fme.exe" D:\Stelios\..... --MAX_NUM_POINTS {0}'.format(self.valCouche))
你必须定义一个初始化函数:def__init__(self)
将 valCouche 定义为实例属性使其可在所有方法上访问,因此我们有以下内容
class projet(object):
def __init__(self):
self.valCouche = ''
def nameCouche(self):
self.valCouche = float(ui.valLissage.displayText())
@staticmethod #here there is no need for self so it is a method of class
def choixTraitement():
ui.okLissage.clicked.connect(p.goLissage)
def goLissage(self):
if ui.chkboxLissage.isChecked():
print(self.valCouche) # result is False
os.system(r'"C:\Program Files\FME\fme.exe" D:\Stelios\..... --MAX_NUM_POINTS {0}'.format(self.valCouche))
你这里有多个问题。
首先,如果你在 class 定义的中间写这个:
valCouche = nameCouche()
...您正在创建一个 class 属性,该属性由所有实例共享,而不是普通实例属性。
此外,您在 class 定义时 运行 这个。这意味着 是 还没有 self
——还没有任何实例要成为 self
——所以你不能调用像 nameCouche
,因为你没有什么可以调用它的。
您要做的是在实例初始化时调用正在初始化的实例上的方法,并将 return 值存储在实例属性中:
def __init__(self):
self.valCouche = self.nameCouche()
然后,当你以后想在另一个方法中访问这个值时,你必须以 self.valCouche
.
的形式访问它
如果您进行这些更改,它将 起作用 。但是您的对象模型仍然没有多大意义。为什么 nameCouche
是一个与对象没有任何关系并且不访问其任何属性的方法?也许它作为 @staticmethod
有意义,但实际上,我认为它作为 class 之外的普通函数更有意义。实际上,您编写的代码的 none 似乎与 class 有任何关系。
这种把所有东西都塞进 class 的设计通常表明您正试图在 Python 中编写 Java 代码,但还没有但真正了解 Python 是如何面向对象的。您可能想阅读有关 Python classes 的很好的教程。但简而言之:如果您编写 class 只是为了在某个地方转储一堆模糊相关的函数,那么您需要的是一个模块,而不是 class。如果您有某种理由需要 class 的实例,并且函数都作用于每个实例的数据,那么您需要一个 class.
这是我的代码的一部分:
class projet(object):
def nameCouche(self):
valLissage = float(ui.valLissage.displayText())
return (valLissage)
valCouche = nameCouche() # asks for a positional argument but 'self' doesnt work
def choixTraitement(self):
ui.okLissage.clicked.connect(p.goLissage)
def goLissage(self, valCouche):
if ui.chkboxLissage.isChecked():
print(valCouche) # result is False
os.system(r'"C:\Program Files\FME\fme.exe" D:\Stelios\..... --MAX_NUM_POINTS {0}'.format(valCouche))
所以我想在 goLissage
方法中使用 valCouche
但它不起作用。
我以为 valCouche
会有 valLissage
的参数,但它给出了 False 作为值。
我尝试了不同的替代方法,但仍然无效。
您必须在 __init__
方法(构造函数)中声明变量,然后在您的代码中使用它
例如:
class projet(object):
def __init__(self):
self.valCouche = ''
def nameCouche(self):
valLissage = float(ui.valLissage.displayText())
return (valLissage)
def choixTraitement(self):
ui.okLissage.clicked.connect(p.goLissage)
def goLissage(self, valCouche):
if ui.chkboxLissage.isChecked():
self.valCouche = self.nameCouche()
print(self.valCouche) # result is False
os.system(r'"C:\Program Files\FME\fme.exe" D:\Stelios\..... --MAX_NUM_POINTS {0}'.format(self.valCouche))
你必须定义一个初始化函数:def__init__(self) 将 valCouche 定义为实例属性使其可在所有方法上访问,因此我们有以下内容
class projet(object):
def __init__(self):
self.valCouche = ''
def nameCouche(self):
self.valCouche = float(ui.valLissage.displayText())
@staticmethod #here there is no need for self so it is a method of class
def choixTraitement():
ui.okLissage.clicked.connect(p.goLissage)
def goLissage(self):
if ui.chkboxLissage.isChecked():
print(self.valCouche) # result is False
os.system(r'"C:\Program Files\FME\fme.exe" D:\Stelios\..... --MAX_NUM_POINTS {0}'.format(self.valCouche))
你这里有多个问题。
首先,如果你在 class 定义的中间写这个:
valCouche = nameCouche()
...您正在创建一个 class 属性,该属性由所有实例共享,而不是普通实例属性。
此外,您在 class 定义时 运行 这个。这意味着 是 还没有 self
——还没有任何实例要成为 self
——所以你不能调用像 nameCouche
,因为你没有什么可以调用它的。
您要做的是在实例初始化时调用正在初始化的实例上的方法,并将 return 值存储在实例属性中:
def __init__(self):
self.valCouche = self.nameCouche()
然后,当你以后想在另一个方法中访问这个值时,你必须以 self.valCouche
.
如果您进行这些更改,它将 起作用 。但是您的对象模型仍然没有多大意义。为什么 nameCouche
是一个与对象没有任何关系并且不访问其任何属性的方法?也许它作为 @staticmethod
有意义,但实际上,我认为它作为 class 之外的普通函数更有意义。实际上,您编写的代码的 none 似乎与 class 有任何关系。
这种把所有东西都塞进 class 的设计通常表明您正试图在 Python 中编写 Java 代码,但还没有但真正了解 Python 是如何面向对象的。您可能想阅读有关 Python classes 的很好的教程。但简而言之:如果您编写 class 只是为了在某个地方转储一堆模糊相关的函数,那么您需要的是一个模块,而不是 class。如果您有某种理由需要 class 的实例,并且函数都作用于每个实例的数据,那么您需要一个 class.