У вас есть несколько здесь проблемы.
Во-первых, если вы пишете это в середине определения класса:
valCouche = nameCouche()
... вы создаете атрибут класса, который является общим для всех случаев, а не обычный атрибут экземпляра.
Кроме того, вы запускаете это при определении времени определения класса. Это значит, что is no self
еще нет. Есть еще нет примеров self
- так вы не можете назвать метод nameCouche
, потому что вам нечего называть его.
То, что вы хотите сделать, это вызвать метод во время инициализации экземпляра к экземпляру инициализации и хранения возвращаемого значения в атрибуте например:
def __init__(self):
self.valCouche = self.nameCouche()
Затем, когда вы хотите, чтобы получить это значение, в другом методе позже вы должны получить к нему доступ как self.valCouche
.
Если вы сделаете эти изменения, то это будет работа. Но ваша объектная модель все еще не имеет большого смысла. Почему nameCouche
метод, когда он не имеет никакого отношения к объекту и не имеет доступа к каким-либо его атрибутам? Возможно, это имеет смысл как @staticmethod
, но на самом деле, я думаю, что это имеет смысл, как простая функция вне класса. Фактически, нет кода, который вы написали, похоже, имеет какое-либо отношение к классу.
Этот вид дизайна cram-everything-in-class часто является признаком того, что вы пытаетесь написать Java-код в Python и еще не поняли, как Python делает OO. Возможно, вы захотите прочитать хороший учебник по классам Python. Но кратко: если вы пишете класс, просто чтобы где-то свалить кучу неопределенных функций, вам нужен модуль, а не класс. Если у вас есть причина иметь экземпляры этого класса, а все функции действуют на данные каждого экземпляра, то вам нужен класс.
OT, но в любом случае: 1. ваше имя класса должно быть заглавным («Projet», а не «projet»), 2.«ui» должен быть атрибутом (передан методу '__init __()'), а не глобальным, 3. команда, вызываемая 'os.system()', и ее аргументы не должны быть жестко закодированы (либо сделать их настройки, либо пройти их в '' __init __() ') вашего класса. Ну, если вы ожидаете, что ваш код будет поддерживаемым, то есть ... –
Спасибо. 1- Я капитализировал «Projet». 2- «ui» - это класс Ui_Interface() 3, он не будет жестко запрограммирован, когда я закончу, но я все еще в раннем процессе. – guy16
Вы говорите: «ui» - это класс Ui_Interface() », который FWIW предлагает, что это экземпляр этого класса, но в любом случае: класс, экземпляр или модуль, это все еще объект, но это не главное ... Дело в том, что быть в состоянии подставить любое «ui» с любым другим объектом, имеющим один и тот же интерфейс. Правильная развязка делает проверяемый и поддерживаемый код. –