Результаты поиска по категориям или таксономии? Wordpress

Ответ в нескольких словах

В вашем примере itsProblem является локальной переменной.

Для установки и получения переменных экземпляра необходимо использовать self. Вы можете установить его в методе __init__. Тогда ваш код будет выглядеть следующим образом:

class Example(object):
    def __init__(self):
        self.itsProblem = "problem"


theExample = Example()
print(theExample.itsProblem)

Но если вы хотите получить истинную переменную класса, используйте имя класса напрямую:

class Example(object):
    itsProblem = "problem"


theExample = Example()
print(theExample.itsProblem)
print (Example.itsProblem)

Но будьте осторожны с этим, так как theExample.itsProblem автоматически устанавливается равным Example.itsProblem, но не является той же самой переменной и может быть изменен независимо.

Некоторые объяснения

В Python переменные машины созданный динамически. Для этого вы можете сделать следующее:

class Example(object):
    pass

Example.itsProblem = "problem"

e = Example()
e.itsSecondProblem = "problem"

print Example.itsProblem == e.itsSecondProblem 

Печать

True

Следовательно, это именно то, что вы делаете с предыдущие примеры.

Действительно, в Python мы используем self как this, но это немного больше. Self является первым аргументом для любого объектного метода, потому что первый аргумент всегда является ссылкой на объект. Это автоматически, независимо от того, называете ли вы его самим или нет.

Что вы можете сделать:

class Example(object):
    def __init__(self):
        self.itsProblem = "problem"


theExample = Example()
print(theExample.itsProblem)

Или:

class Example(object):
    def __init__(my_super_self):
        my_super_self.itsProblem = "problem"


theExample = Example()
print(theExample.itsProblem)

одна и та же. Первым аргументом метода ANY object является текущий объект, мы называем его self как соглашение. И вы добавляете только переменную к этому объекту, так же, как вы делали бы это извне.

Теперь о переменных класса.

Когда вы это сделаете:

class Example(object):
    itsProblem = "problem"


theExample = Example()
print(theExample.itsProblem)

Вы заметите, что мы сначала задали переменную класса, затем мы обращаемся к переменной объекта (экземпляра). Мы никогда не устанавливаем эту переменную объекта, но она работает, как это возможно?

Ну, Python пытается получить первую переменную объекта, но если она не сможет ее найти, она даст вам переменную класса. Предупреждение: переменная класса разделяется между экземплярами, а объектная переменная - нет.

Как вывод, никогда не используйте переменные класса для установки значений по умолчанию для переменных объекта. Используйте __init__ для этого.

В конце концов вы узнаете, что классы Python являются экземплярами и, следовательно, самими объектами, что дает новое понимание для понимания вышеизложенного. Вернитесь и прочитайте это позже, как только вы это осознаете.

0
задан Marcelo R 22 March 2019 в 14:55
поделиться

1 ответ

Ваш вопрос немного неясен.

Является ли вопрос «как ограничить результаты поиска по категориям?»

Возможно, вы хотите установить категорию. Я считаю, что это будет работать

$query->set('cat', 123);

Или вы можете запросить налоговый запрос

$taxquery = array(
            'relation'=>'AND',
                array(
                    'taxonomy' => 'custom_cat',
                    'field' => 'term_id',
                    'terms' =>  array(123) ,
                )
            );
$query->set('tax_query', $taxquery);
0
ответ дан Willy Richardson 22 March 2019 в 14:55
поделиться
Другие вопросы по тегам:

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