5
#! /usr/bin/env python
import os
import stat
import sys
class chkup:

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

        def user_read():
                """Return True if 'file' is readable by user 
            """
            # Extract the permissions bits from the file's (or
            # directory's) stat info.
                b = bool(filepermission.st_mode & stat.S_IRUSR)
                print b
            return b

        def user_write():
                """Return True if 'file' is readable by user 
            """
            # Extract the permissions bits from the file's (or
            # directory's) stat info.
                b = bool(filepermission.st_mode & stat.S_WRUSR)
                print b
            return b

        def user_exec():
                """Return True if 'file' is readable by user 
            """
            # Extract the permissions bits from the file's (or
            # directory's) stat info.
                b = bool(filepermission.st_mode & stat.S_IXUSR)
                print b
            return b

def main():
        i = chkup()
        place = '/net/home/f08/itsrsw1/ScriptingWork/quotacheck'
        i.set(place)

if __name__ == '__main__':
        main()

私が受け取ったそのコードで

> Traceback (most recent call last):
  File "chkup.py", line 46, in <module>
    main()
  File "chkup.py", line 43, in main
    i.set(place)
TypeError: set() takes exactly 1 argument (2 given)

何かご意見は?

4

9 に答える 9

16

Python クラス メソッドの最初の引数はself変数です。を呼び出すclassInstance.method(parameter)と、メソッドは として呼び出されmethod(self, parameter)ます。

したがって、クラスを定義するときは、次のようにします。

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

Python チュートリアルを一読することをお勧めします。

于 2009-12-08T17:54:37.247 に答える
4

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ます) を最初のパラメーターとしてメソッドに渡す必要があります。

于 2009-12-08T17:55:48.587 に答える
2

selfクラスのインスタンスを表す変数を明示的に渡す必要があります。

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

呼び出す必要はありませんがself、従うのは良い規則であり、コードは他のプログラマーに理解されます。

于 2009-12-08T17:54:49.383 に答える
1

set()クラスのメソッドですchkup。を呼び出すとi.set(place)、python はメソッドの最初の引数を使用してインスタンス i を追跡します。通常、すべてのインスタンス メソッドは、self と呼ばれる少なくとも 1 つの引数を受け取り、その後に後続の引数が続きます。クラスを再定義する必要があります。

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

stackoverflow で「self」と python を調べることができます。

Python __init__ と self は何をしますか?

于 2009-12-08T18:00:18.127 に答える
1

selfすべてのクラス メンバー関数に対する暗黙の最初の引数です。したがって、i.set(place)呼び出しは実際に呼び出しますset(i, place)。クラスを定義するときはこれを考慮に入れ、def set(self, file)代わりに書く必要があります。

于 2009-12-08T17:54:15.703 に答える
0

selfクラスでは、メソッド メンバーのパラメーターを考慮する必要があります。

于 2009-12-08T17:54:30.650 に答える
0

これは、Python が現在のオブジェクトを引数としてクラス内のすべてのメソッドに自動的に渡すためです。関数に 2 つの引数を渡すと、Python は現在のオブジェクトである 3 番目の引数を追加します。メソッド プロトタイプはこれを考慮する必要があります。

于 2010-01-02T18:25:16.297 に答える
0

クラスのバインドされた (インスタンス) メソッドとして扱っsetているため、インスタンスを最初の引数として明示的に受け取る必要があります。慣習的に「自己」と呼ばれます。

def set(self, file):
    filepermission = os.stat(file)
    user_read()
    user_write()
    user_exec()
于 2009-12-08T17:55:43.737 に答える
0

非静的メソッドを定義するには、このように最初の引数として「self」を指定する必要があります

クラスchkup:

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

#これは非静的メソッドを作成するために行われます。

# ここでの set() の呼び出しは

chk=chkup()

chk.set(fileName) # 呼び出すときに「self」を指定しないことに注意してください

于 2009-12-10T08:51:13.687 に答える