Почему мой класс Python утверждает, что у меня есть 2 аргумента вместо 1?

Один из моих приемов избранного с ударом является "каналом tar". Когда у Вас есть чудовищное количество файлов для копирования от одного каталога до другого, делание "CP */an/other/dir" не работает, если количество файлов слишком высоко, и взорвите удар globber, таким образом, канал tar:

(cd /path/to/source/dir/ ; tar cf - * ) | (cd /path/to/destination/ ; tar xf - )

... и если у Вас есть netcat, Вы можете даже делать "netcat канал tar" через сеть!!

5
задан Sourav Ghosh 18 March 2015 в 13:58
поделиться

9 ответов

Первым аргументом для метода класса Python является переменная self . Если вы вызываете classInstance.method (parameter) , метод вызывается как method (self, parameter) .

Итак, когда вы определяете свой класс, сделайте что-нибудь вроде это:

class MyClass(Object): 
    def my_method(self, parameter): 
        print parameter

Вы можете прочитать учебник Python .

16
ответ дан 18 December 2019 в 06:35
поделиться

Потому что вы не передаете объект (обычно называемый self ) в качестве первого параметра вашим методам. В Python такой вызов:

my_obj.do_something(my_other_obj)

, по сути, превращается в такой вызов:

MyClass.do_something(my_obj, my_other_obj)

Таким образом, Python ищет сигнатуру метода, подобную этой:

class MyClass(object):
    def do_something(self, my_other_obj):
        self.my_var = my_other_obj

Итак, вы должны передать объект (обычно называемый self ) в качестве первого параметра метода .

4
ответ дан 18 December 2019 в 06:35
поделиться

Вам необходимо явно передать переменную self , которая представляет экземпляр класса, например:

def set(self, file):
    filepermission = os.stat(file)
    self.user_read()
    self.user_write()
    self.user_exec()

Ее не нужно называть self , но это хорошее соглашение, и ваш код будет понят другим программистам.

2
ответ дан 18 December 2019 в 06:35
поделиться

self - неявный первый аргумент для всех функций-членов класса. Таким образом, вызов i.set (place) фактически вызывает set (i, place) . Вы должны принять это во внимание при определении своего класса и вместо этого написать def set (self, file) .

1
ответ дан 18 December 2019 в 06:35
поделиться

set () - это метод класса chkup . Когда вы вызываете i.set (place) , python отслеживает экземпляр i, используя первый аргумент метода. Как правило, каждый метод экземпляра получает по крайней мере один аргумент, называемый self, и последующие аргументы следуют. Вам следует переопределить свой класс:

class chkup:
    def set(self, file):
        "etc..."

Вы можете найти «self» и python в stackoverflow:

Python __init__ и self, что они делают?

и т. Д.

1
ответ дан 18 December 2019 в 06:35
поделиться

В классе необходимо учитывать параметр self для членов метода.

0
ответ дан 18 December 2019 в 06:35
поделиться

Поскольку вы обрабатываете set как связанный (экземплярный) метод класса, вы должны явно получить экземпляр в качестве первого аргумента. По соглашению он называется "self".

def set(self, file):
    filepermission = os.stat(file)
    user_read()
    user_write()
    user_exec()
0
ответ дан 18 December 2019 в 06:35
поделиться

, чтобы определить нестатический метод, вы должны указать "self" в качестве первого аргумента, как этот

class chkup:

    def set(self,file):
            filepermission = os.stat(file)

# это делается для создания нестатических методов,

# вызов set () здесь выполняется

chk = chkup ()

chk.set (fileName) # обратите внимание, что вы не указываете «self» при вызове

0
ответ дан 18 December 2019 в 06:35
поделиться

Т.е. поскольку питон автоматически передает текущий объект в качестве аргумента всем методам в классе, то при передаче 2 аргументов в функцию, питон добавляет третий аргумент, которым является текущий объект, то прототип метода должен учитывать это

.
0
ответ дан 18 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

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