Tanım önceliğini değiştirmek

Katılım
2 Kasım 2020
Mesajlar
1.929
Makaleler
14
Çözümler
34
Yer
Dünya
Merhabalar,
İki kaynak dosyam var. Bir dosya çalışan programın tutulduğu bilgileri içeriyor. Diğer dosya ise bu dosyalarla işlenmesi için tanımladığım classlar var ve bu classlara ulaşamıyorum, tanımlanmadığına dair NameError veriyor. Sorun tanım önceliğinden diye düşünüyorum, diğer kaynak dosyalarımda sorun yaşamıyorum.
Peki tanım önceliğini nasıl değiştirebilirim? İnternette bu konu ile alakalı bir kaynak bulamadım.

Not: Python kullanıyorum.
 
Main kodunuzda obje oluştururken mi tanımlanmadı hatasını alıyorsunuz?
 
Hayır. Elimde bilgileri tuttuğum dosya main'in çalışması için gerekli bilgileri taşıyor. Diğer kaynak dosyası ise main hariç çoğu kaynak dosyasına bilgi sağlıyor.
hata satırını ve class kodunu atabilir misiniz?
Önemli gizli veya bilmemizi istemediğiniz bir şey varsa gizleyin. veya sansürleyerek fotoğraf şeklinde paylaşın.
 
hata satırını ve class kodunu atabilir misiniz?
Önemli gizli veya bilmemizi istemediğiniz bir şey varsa gizleyin. veya sansürleyerek fotoğraf şeklinde paylaşın.
program_info.py:
Python:
from Commands.commands import *
from Interpreter.variable import VariableList

commands: list[Command] = [
        PrintCom('print', 'void', 'optimize'),
        InpCom('input', 'unvoid', 1),
        ExitCom('exit', 'void', 0),
        WaitInpCom('wait_input', 'void', 0),
        ToStrCom('to_string', 'unvoid', 1),
        ToIntCom('to_int', 'unvoid', 1)
    ]


def get_command(arg):
    for command in commands:
        if command.get_arg() == arg:
            return command, None

    return None, Errors.errors.CommandNotFoundError(f"'{arg}' not found.")


def_variable_list = VariableList([])

commands.py:
Python:
import Errors.errors
import Token.token
from Token.token import Token as _Tok


class Command:
    def __init__(self, arg, com_type, len):
        self.arg = arg
        self.com_type = com_type
        self.param_length = len
        self.parameters = []
        self.tok_type = 'COMMAND'

    def set_param(self, param):
        self.parameters = param

    def run(self):
        pass

    def control(self):
        if len(self.parameters) != self.param_length and self.param_length != 'optimize':
            Errors.errors.ParamError("Wrong param count.").error()
            exit()

    def get_arg(self):
        return self.arg


class PrintCom(Command):
    def run(self):
        self.control()
        cur = ''
        for param in self.parameters:
            cur += str(param.value)
        print(cur)


class InpCom(Command):
    def run(self):
        self.control()
        arg = input(self.parameters[0].value)
        return _Tok(arg, Token.token.STR)


class ExitCom(Command):
    def run(self):
        self.control()
        exit()


class WaitInpCom(Command):
    def run(self):
        self.control()
        input()


class ToStrCom(Command):
    def run(self):
        self.control()
        try:
            return Token.token.Token(str(self.parameters[0].value), Token.token.STR)
        except:
            Errors.errors.NotConvertableError("Not convertable.").error()
            exit()


class ToIntCom(Command):
    def run(self):
        self.control()
        try:
            return Token.token.Token(int(self.parameters[0].value), Token.token.INT)
        except:
            Errors.errors.NotConvertableError("Not convertable.").error()
            exit()


class NullCom(Command):
    pass

Hata: NameError: name "PrintCom" is not defined
 
Aldığınız hatayı da atabilir misiniz?
 
Aldığınız hatayı da atabilir misiniz?
Merhaba, sorunun kaynağını buldum.
program_sys isimli kaynak dosyadaki bilgileri parser isimli dosyada kullanıyordum, aynı zamanda parser isimli kaynak dosyadan program_sys'den bilgi değiştirmeye çalışıyordum. Ayrıca program_sys ve parser, commands isimli kaynak dosyasından bilgi aldığı için tanım hatası alıyormuşum. Bunu değiştirince sorun düzeldi.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…