未定义一个特定变量 我不知道为啥
Posted
技术标签:
【中文标题】未定义一个特定变量 我不知道为啥【英文标题】:One specific variable is not define Idon't Know why未定义一个特定变量 我不知道为什么 【发布时间】:2020-10-10 08:16:33 【问题描述】:我正在开发一个 python 项目,该项目是基于 pplapi 数据库的社会研究。我的第一个研究是关于一个人的年龄和她的财富之间的联系。从字典中,我挑选出给出人们年龄的信息和给出财富的信息,然后我将这些信息放入一个矩阵,我绘制所有内容。我的第二项研究是关于幸福与某人离开的城市规模之间的联系。和之前我在同一个字典中找到我需要的信息一样,我将所有内容放入一个矩阵并绘制所有内容。我正在尝试做一些对象编程,但我是新手。
问题出在我的类 Zone 中,我定义了一个名为“H”的变量,但 python 说这个变量没有定义。我想我放在函数上方的“@classmethod”有一个技巧,但我不知道该怎么做才能解决所有问题。有人可以帮助我吗?如果可能的话,可以解释一下我执行此命令时会发生什么?我添加了 Python 给我的错误消息的图像。
import json
import math
class Agent: # Les class n'ont pas de () à la fin
def dire_bonjour(self,prenom):
return "Bonjour !".format(prenom)
def __init__(self,position,**agent_attributes):
self.position = position
for attr_name, attr_value in agent_attributes.items():
setattr(self,attr_name,attr_value)
class Position:
def __init__(self, abscisses_degrees, ordonnees_degrees):
self.abscisses_degrees = abscisses_degrees
self.ordonnees_degrees = ordonnees_degrees
@property
def abscisses_rad(self):
return self.abscisses_degrees * math.pi / 180
@property
def ordonnees_rad(self):
return self.ordonnees_degrees * math.pi / 180
class Zone:
ZONES = []
MIN_LONGITUDE_DEGREE = -180
MAX_LONGITUDE_DEGREE = 180
MIN_LATITUDE_DEGREE = -90
MAX_LATITUDE_DEGREE = 90
DDEGREES = 1
Η = 1
def __init__(self, corner1,corner2):
self.corner1 = corner1
self.corner2 = corner2
self.inhabitants = 0
@classmethod
def initialize_zones(cls):
for abscisses in range(cls.MIN_LATITUDE_DEGREE,cls.MAX_LATITUDE_DEGREE,H):
for ordonnees in range(cls.MIN_LONGITUDE_DEGREE,cls.MAX_LONGITUDE_DEGREE,DDEGREES):
bottom_left_corner = Position(longitude,latitude)
top_right_corner = Position(longitude+cls.DDEGREES,latitude+H)
zone = Zone(bottom_left_corner,top_left_corner)
cls.ZONES.append(zone)
print(len(cls.ZONES))
def main():
for agent_attributes in json.load(open("agents-100k.json")):
abscisses = agent_attributes.pop("latitude") #Latii est couchée....(latitude)
ordonnees = agent_attributes.pop("longitude") # pour ne prélever que la valeur souhaitée, utiliser agent_attributes.pop(str)
position = Position(abscisses,ordonnees)
agent = Agent(position,**agent_attributes)
Zone.initialize_zones()
为了方便起见,我在此处放置了一个 git hub 链接,您可以在其中找到我要重现的代码,您还可以找到我正在使用的数据库。https://github.com/OpenClas-s-rooms-Student-Center/la_poo_avec_python/tree/04_class_methods
【问题讨论】:
H
在 initialize_zones() 中应该是 cls.H
。
【参考方案1】:
您在一个类中定义了H
,需要将其称为self.H
。您还需要将类方法声明为接受self
作为第一个参数。
【讨论】:
好吧,我会尝试一下,但在这种情况下,为什么我对所有不同的变量都没有问题,例如 MIN_LONGITUDE_DEGREE = -180 MAX_LONGITUDE_DEGREE = 180 MIN_LATITUDE_DEGREE = -90 MAX_LATITUDE_DEGREE = 90 DDEGREES = 1 @973KarljoYcls
适合类方法,但在H
前面忘记了cls.
,与其他方法不同。【参考方案2】:
由于您将其装饰为类方法 (@classmethod
),因此您需要将其作为类变量 cls.H
进行访问。
也许下面的小例子会对你有所帮助
class base_foo:
cls_variable = "I'm in Class...."
@staticmethod
def say_static_hello():
print("Hello...")
@classmethod
def say_class_hello(cls):
if(cls.__name__=="class_foo"):
print(cls.cls_variable)
print("Hello foo")
elif(cls.__name__=="class_bar"):
print(cls.cls_variable)
print("Hello bar")
class class_foo(base_foo):
def say_class_hello(self):
print("Class foo")
class class_bar(base_foo):
def say_static_hello(self):
print("Class bar")
test_foo = class_foo()
test_foo.say_class_hello()
test_foo.say_static_hello()
test_bar = class_bar()
test_bar.say_class_hello()
test_bar.say_static_hello()
输出:
Class foo
Hello...
I'm in Class....
Hello bar
Class bar
编辑:
出了点问题,所以我修改了代码,介意使用以下文件执行。单独的文件?
为什么?
您的文件中有一个Diacritics
(非Ascii):) 这就是原因。看看这个https://pteo.paranoiaworks.mobi/diacriticsremover/
import math
class Agent: # Les class n'ont pas de () à la fin
def dire_bonjour(self,prenom):
return "Bonjour !".format(prenom)
def __init__(self,position,**agent_attributes):
self.position = position
for attr_name, attr_value in agent_attributes.items():
setattr(self,attr_name,attr_value)
class Position:
def __init__(self, abscisses_degrees, ordonnees_degrees):
self.abscisses_degrees = abscisses_degrees
self.ordonnees_degrees = ordonnees_degrees
@property
def abscisses_rad(self):
return self.abscisses_degrees * math.pi / 180
@property
def ordonnees_rad(self):
return self.ordonnees_degrees * math.pi / 180
class Zone:
ZONES = []
MIN_LONGITUDE_DEGREE = -180
MAX_LONGITUDE_DEGREE = 180
MIN_LATITUDE_DEGREE = -90
MAX_LATITUDE_DEGREE = 90
DDEGREES = 1
H = 1
def __init__(self, corner1,corner2):
self.corner1 = corner1
self.corner2 = corner2
self.inhabitants = 0
@classmethod
def initialize_zones(cls):
for abscisses in range(cls.MIN_LATITUDE_DEGREE,cls.MAX_LATITUDE_DEGREE,cls.H):
for ordonnees in range(cls.MIN_LONGITUDE_DEGREE,cls.MAX_LONGITUDE_DEGREE,DDEGREES):
bottom_left_corner = Position(longitude,latitude)
top_right_corner = Position(longitude+cls.DDEGREES,latitude+cls.H)
zone = Zone(bottom_left_corner,top_left_corner)
cls.ZONES.append(zone)
print(len(cls.ZONES))
def main():
for agent_attributes in json.load(open("agents-100k.json")):
abscisses = agent_attributes.pop("latitude") #Latii est couchée....(latitude)
ordonnees = agent_attributes.pop("longitude") # pour ne prélever que la valeur souhaitée, utiliser agent_attributes.pop(str)
position = Position(abscisses,ordonnees)
agent = Agent(position,**agent_attributes)
Zone.initialize_zones()
【讨论】:
ok 我试试看,如果成功我稍后再回复你 我添加了一个“cls”。在 H 前面,但它不工作...... 您可能在某个地方错过了 - 请确保您在所有地方都申请了。 我已经编辑并添加了修改后的代码,你能用单独的文件运行它吗?您的文件中有一个变音符号(非Ascii):)这就是原因。看看这个pteo.paranoiaworks.mobi/diacriticsremover 我尝试检查所有字符是否都在 ascii 中,是的,没问题,那里没有问题以上是关于未定义一个特定变量 我不知道为啥的主要内容,如果未能解决你的问题,请参考以下文章
预检请求未通过访问控制检查:它没有 HTTP ok 状态问题,我不知道为啥,我正确导入了所有内容