У меня возникла проблема с точки зрения назначения объектов. Я хочу, чтобы иметь возможность назначать объект через функцию, но поскольку переменная name
не определена до тех пор, пока во время функции, когда я сначала вызываю функцию (с именем = john), она говорит: NameError: name 'john' is not defined
.Определение переменной после ее вызова?
Я использую этот сценарий, чтобы помочь мне, когда я бегу сеанса игры, и я хочу, чтобы иметь возможность создавать новую NPC, по желанию, но в любом случае, чтобы сделать это без первого использования: >>> blahblah = Character()
в питоне незамедлительный?
Извините за блок кода, и я сожалею, если есть простое решение.
import random
import math
combat_participants = []
npc_list = []
class Character():
"""Basic class for character statistics
"""
def get_stats(self):
"""Refreshes the stats after new assignment
"""
self.hp = self.st
self.will = self.iq
self.per = self.iq
self.fp = self.ht
self.bspeed = (self.ht + self.dx)/4
self.dodge = math.floor(self.bspeed + 3)
self.bmove = math.floor(self.bspeed)
self.blift = round(self.st*self.st/5)
def get_status(self):
"""Checks the status of the character
"""
if self.hp < -self.hp:
self.status = 'Dead'
elif self.hp < 0:
self.status = 'Unconscious'
else:
self.status = 'Alive'
#Primary Attributes
st = 10
dx = 10
iq = 10
ht = 10
#Secondary Attributes
hp = st
will = iq
per = iq
fp = ht
bspeed = (ht + dx)/4
dodge = math.floor(bspeed + 3)
bmove = math.floor(bspeed)
blift = round(st*st/5)
#Other
status = 'Alive'
weapon = 'None'
shield = 'None'
char_name = ''
def create_npc(name, str_name, level, combat):
"""
/long and irrelevant/
"""
name = Character()
name.char_name = str_name
#Randomly assigning attributes
prim_attr_list = [name.st, name.dx, name.iq, name.ht]
for attr in prim_attr_list:
attr = random.randint(7+level,9+level)
name.get_stats(name)
#Randomly assigns a weapon
temp_weapon_list = []
for weapon in weapon_list:
if weapon.st <= name.st:
temp_weapon_list += weapon
name.weapon = temp_weapon_list[random.randint(0,len(temp_weapon_list)-1)]).wep_name
#Adds them to the npc list
global npc_list
npc_list += [name]
#Adds them to combat list if they are in combat
global combat_participants
if combat:
combat_participants += [name]
EDIT: EDIT: После вызова функции с create_npc ('Джон', 'Джон Смитсон II', 2, True)
После того, как я назначен obect класса, как 'john'
вместо john
, я не знаю, как получить к нему доступ. Например: >>> john.char_name
даст мне эту ошибку NameError: name 'john' is not defined
и >>> 'john'.char_name
дает мне AttributeError: 'str' object has no attribute 'char_name'
Это 'john' или' 'john' '? – Christian
Это просто 'john' – KieranM
А что тогда' john'? – Christian