AttributeError: объект 'builtin_function_or_method' не имеет атрибута 'randint' [duplicate]

Ниже приведен пример передачи параметров в документ fxml через пространство имен.

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx/null" xmlns:fx="http://javafx.com/fxml/1">
    <BorderPane>
        <center>
            <Label text="$labelText"/>
        </center>
    </BorderPane>
</VBox>

Определить значение External Text для переменной пространства имен labelText:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class NamespaceParameterExampleApplication extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws IOException {
        final FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("namespace-parameter-example.fxml"));

        fxmlLoader.getNamespace()
                  .put("labelText", "External Text");

        final Parent root = fxmlLoader.load();

        primaryStage.setTitle("Namespace Parameter Example");
        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }
}
4
задан blaces 14 July 2011 в 16:29
поделиться

4 ответа

Когда вы from random import *, все определения из random становятся частью текущего пространства имен. Это означает, что вам не нужно приписывать что-либо с помощью random., но это также означает, что вы можете получить столкновение имен, даже не зная его.

Предпочтительным способом является import random.

7
ответ дан Mark Ransom 18 August 2018 в 13:40
поделиться

Если вы используете 'from moduleName import ....', вы получаете все классы, функции и переменные, которые вы указали после импорта или всего, если вы указали *: из произвольного импорта * для i в диапазоне (15): print randrange (3,13,3)

Но обратите внимание, что это не очень хорошо, чтобы импортировать все, было бы лучше импортировать только необходимые классы, функции и переменные, поэтому, если вам нужно только randrange, вам нужно use:

from random import randrange
for i in range(15):                     
    print randrange(3,13,3)

Если вы используете случайный импорт, это означает, что вы импортируете модуль, поэтому вам нужно указать moduleName. когда вы хотите использовать его так:

import random
for i in range(15):                     
    print random.randrange(3,13,3)
2
ответ дан Artsiom Rudzenka 18 August 2018 в 13:40
поделиться

Импортирование всего из модуля не рекомендуется только из-за этих удивительных побочных эффектов: модуль random содержит функцию случайным образом, поэтому import * from random выполняет следующие действия:

from random import randrange
from random import random
...

Теперь, когда вы обращаетесь к random, вы получаете доступ к функции вместо модуля . Вы можете использовать randrange (без префикса random.), но import random и явным образом указывая, из какого модуля есть функция, является лучшей идеей.

3
ответ дан ben_nuttall 18 August 2018 в 13:40
поделиться

from random import * импортирует все функции из модуля, называемого случайным, но не random.

Здесь вы можете напрямую вызвать функции случайным образом следующим образом: randrange(3,13,3) и т. д.

import random импортирует имя случайное, из которого вы можете позже вызывать функции следующим образом: random.randrange(3,13,3) и т. д.

2
ответ дан inspectorG4dget 18 August 2018 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: