我是否能够在类中定义一些可以访问的变量

  • 本文关键字:访问 变量 定义 是否 python
  • 更新时间 :
  • 英文 :


我对编程很陌生,我不确定我的问题是否正确。

我正在尝试制作一个程序来模拟植物在不同"季节"的基本生长。在各种"天气"中;事件以及"土壤"的类型;他们在。

例如:如果季节=夏季,则增长率= 1x,则出现晴天的几率为0.9,出现雨天的几率为0.1。

如果我创建一个名为Summer()的类,是否有可能定义这个特定季节的增长率和天气事件,并在以后访问它们?

我现在的代码是:

class Season():
def __init__(self, name):
self.getSeason = name

def getGrowthRate(self):
if self.getSeason == "Summer":
return 1
#then so forth for the rest of them
def getWeatherEvent(self):
if self.getSeason == "Summer":
# i dont know how to do this part, but for example, sunny = 0.9, rainy = 0.1 chance

是否可以将季节(也许还有天气事件)定义为独立的实体,并从它们内部访问我需要的值?

这可能不是很清楚,但任何帮助将非常感激,谢谢。

对我来说,自然的方法是有类Season和所述类的实例:夏天,秋天,冬天,春天。我建议如下实现

import random
class Season:
conditions = ("sunny", "rainy")
def __init__(self, name, weights):
self.name = name
self.weights = weights
def get_weather(self):
return random.choices(self.conditions, self.weights)[0]
summer = Season("summer",[0.9,0.1])
fall = Season("fall",[0.5,0.5])
winter = Season("winter",[0.1,0.9])
spring = Season("spring",[0.5,0.5])
print(summer.get_weather()) # rainy
print(summer.get_weather()) # sunny
print(summer.get_weather()) # sunny

输出可能不同,因为它是不确定的。conditions类属性,表示为所有实例共享,name和weight为实例属性。我使用random.choices,因为它允许权重作为第二个参数,它返回列表(在这种情况下有1个元素),所以我们需要通过使用[0]获得该元素。

这个方法怎么样,不需要继承,如果你想让它们每次调用时都改变季节,你可以默认为None,并使用@property装饰他的方法。

import random
class Season:
seasons_data = {'summer':{'sunny':0.9, 'rain':0.1, 'snow':0},
'winter':{'sunny':0.1, 'rain':0.6, 'snow':0.2}}
growth_rate = {'summer':1,'winter':0.4}

seasons = list(seasons_data.keys())
def __init__(self, season=None):
self.season = season  # random.choices(seasons)
self.weather = self.get_weather()
self.growth = self.growth_rate[self.season]

def get_weather(self):
current_season_data = self.seasons_data[self.season]
return random.choices(list(current_season_data.keys()), current_season_data.values())[0]

summer_season = Season('summer') #instance of summer
print(summer_season.weather) # fixed
print(summer_season.growth) # fixed growth of summer
print(summer_season.get_weather()) # randomize weather of summer

最新更新