Существует ли способ назвать частный Метод класса от экземпляра в Ruby?

Чтобы добавить к этому известному вопросу (хотя и слишком поздно): вы также можете сделать df.groupby('column_name').get_group('column_desired_value').reset_index(), чтобы создать новый фрейм данных с указанным столбцом, имеющим определенное значение. Например,

import pandas as pd
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
                   'B': 'one one two three two two one three'.split()})
print("Original dataframe:")
print(df)

b_is_two_dataframe = pd.DataFrame(df.groupby('B').get_group('two').reset_index()).drop('index', axis = 1) 
#NOTE: the final drop is to remove the extra index column returned by groupby object
print('Sub dataframe where B is two:')
print(b_is_two_dataframe)

Запустите это:

Original dataframe:
     A      B
0  foo    one
1  bar    one
2  foo    two
3  bar  three
4  foo    two
5  bar    two
6  foo    one
7  foo  three
Sub dataframe where B is two:
     A    B
0  foo  two
1  foo  two
2  bar  two
15
задан Andrew Grimm 27 March 2012 в 23:37
поделиться

2 ответа

Вот фрагмент кода для соглашений с вопросом. Используя "частный" в определении класса не относится к методам класса. Необходимо использовать "private_class_method" в качестве в следующем примере.

class Foo
  def self.private_bar
    # Complex logic goes here
    puts "hi"
  end
  private_class_method :private_bar
  class <<self
    private
    def another_private_bar
      puts "bar"
    end
  end
  public
  def instance_bar
    self.class.private_bar
  end
  def instance_bar2
    self.class.another_private_bar
  end
end

f=Foo.new
f=instance_bar # NoMethodError: private method `private_bar' called for Foo:Class
f=instance_bar2 # NoMethodError: private method `another_private_bar' called for Foo:Class

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

не берут мой ответ в качестве финала. Я - конечно, не эксперт, но я хотел обеспечить фрагмент кода так, чтобы у других, которые пытаются ответить, были правильно частные методы класса.

12
ответ дан 1 December 2019 в 04:34
поделиться

Если я не неправильно понимаю, не делайте Вас, просто нуждаются в чем-то вроде этого:

class Foo
    private
    def Foo.bar
        # Complex logic goes here
        puts "hi"
    end

    public
    def bar
        Foo.bar
    end
end

, Конечно, Вы могли изменить второе определение для использования подхода self.class.send, если бы Вы хотели избежать жесткого кодирования имя класса...

-1
ответ дан 1 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

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