创建对象时如何避免全局变量?有人告诉我,当我创建对象时,它被认为是全局的。
例如,如果我有这样的课程
class Windpower(object):
def __init__(self,name):
self.name=name
def calc_area(self,dia):
area=((dia/2)**2*math.pi)
return area
def calc_wind_energy(self,area,v):
energy=(random.uniform(0.10,0.4)*1.2*area*v**3*0.5)
return energy
def get_velocity(self):
with open('smhi.txt') as input:
smhi_list=[int(line.strip()) for line in input if line.strip()]
return smhi_list
windpower = Windpower("Stockholm")
solarpower=Solarpower(500,4)
Main.py
def average(lat):
energy_list = [] #
table = [] #
area = klass.solarpower.area
sundigit=klass.solarpower.sundigit
答案 0 :(得分:0)
这更像是python中的反模式而不是其他任何东西。应该避免在模块级别上拥有可执行代码的行为,因为这可以在其他模块导入模块时执行。
然而,有些情况需要在模块级别放置代码,例如在模块上提供对象作为API的一部分(想想Singleton),或进行任何模块初始化。
如果只在将模块作为主程序运行时才需要执行此代码,则应将其置于
之下if __name__ == '__main__':
windpower = Windpower("Stockholm")
solarpower=Solarpower(500,4)
或者将它们放在一个功能中。
请记住术语"全球"这里不正确,因为这些对象的范围是他们定义的模块,而不是整个可执行程序。
答案 1 :(得分:0)
当您在模块的顶层(python文件)中实例化对象时,就像您在示例代码中所做的那样,可以从模块的根目录访问它们。
但是,您确实应该在使用它们的模块中实例化它们。这是一个例子:
wind.py
class WindPower(object):
def __init__(self,name):
self.name=name
main.py
import wind
city = wind.WindPower("Stockholm")
velocity = city.get_velocity()