2016-10-10 18 views
-5
class Person: 
    def __init__(self, name): 
    self.name = name 

    def greet(name, other_name): 
    return "Hi {0}, my name is {1}".format(other_name, name) 

なぜこれは機能しませんか? )このクラスメソッドで何が問題になっていますか?

1:私はクラスで私の名前をアクセスして、私の名前は[MYNAME]で挨拶しようとしています[yournameの]

+1

正確には機能しないものはありますか?サンプルの使用方法をご提供ください –

+1

*どうしてこの作品が*読者にはあまり役に立ちませんか?正確にはうまくいかないことを説明する必要があります。あなたは何が起こるべきか、そうではないと思います。 – idjaw

答えて

0

あなたはselfに合格する必要があります方法へ

Why do you need explicitly have the "self" argument into a Python method?

そう

def greet(self, name, other_name): 
    return "Hi {0}, my name is {1}".format(other_name, name) 
+2

これは奇妙です。 'self.name'が' init'で定義され、それを 'greet'メソッドの引数として渡すとき、なぜこれが受け入れられる解決策になるのでしょうか?これはあまり意味がありません。 – idjaw

0

使用self.name代わりのname

def greet(other_name): 
    return "Hi {0}, my name is {1}".format(other_name, self.name) 
0

二つの可能性があります。

def greet(self, other_name): 
    return "Hi {0}, my name is {1}".format(other_name, self.name), 

次にあなたがINVOことができます:あなたは、あなたがselfパラメータが不足している、greet()メソッドがインスタンスメソッドになりたいですこのようにそれをKE:

adam = Person("Adam") 
adam.greet("John") 

2)あなたは、それは静的メソッドになりたい:

@staticmethod 
def greet(name, other_name): 
    return "Hi {0}, my name is {1}".format(other_name, name) 

次に、あなたがこのようにそれを呼び出すことができます。

Person.greet("Adam", "John") 
2

あなたの実際の問題は、あなたのインスタンスメソッドgreetを定義しているということであるとして:Pythonで

def greet(name, other_name): 

インスタンスメソッドは、あなたのメソッド定義の最初の引数としてinstanceを取ります。今ここでやっていることは、そのインスタンスをnameと呼んでいます。ただし、クラスの__init__では、selfを使用してインスタンスオブジェクトを参照しています。これがあなたの主な問題が起こっている場所です。

あなたが実際にあなたのメソッドを呼び出すしようとすると、あなたが最も可能性が高い。このようなことになっているので、:だから

Hi bob, my name is <__main__.Person object at 0x1018ff2b0> 

を、あなたが実際にあなたのPersonクラスのインスタンスオブジェクトをプリントアウトしています。再び、この名前はnameです。それはselfのようなものです。

ここで修正する必要があるのは2つあります。最初に、インスタンスオブジェクト名を一貫して維持するために、インスタンスgreetメソッドを適切に定義する必要があります。

def greet(self, other_name): 

次に、あなたのインスタンスを参照する必要があなたのインスタンスを参照し、そのオブジェクトから属性へのアクセス属性:

だから、あなたはあなたのgreet方法でnameにアクセスしたい、それがようである必要がありますself.name。だから、

"Hi {0}, my name is {1}".format(other_name, self.name) 

このすべてのより良い理解を持っている、あなたはクラスがPythonでどのように機能するかについての詳細をお読みください。ここにチュートリアルのセクションがあります:

https://docs.python.org/3/tutorial/classes.html

関連する問題