Ya da her şey bir yöntem midir? Her şey bir nesnedir yanaPython'da işlevler var mı?
, bir
def whatever:
, değil file.py sadece bir yöntemdir?
Ya da her şey bir yöntem midir? Her şey bir nesnedir yanaPython'da işlevler var mı?
, bir
def whatever:
, değil file.py sadece bir yöntemdir?
Python'un işlevleri vardır. Her şey bir nesne functions are objects too olduğu gibi. biz bir işlevdir bir nesne oluşturduk def
kullandığınızda
>>> def whatever():
... pass
...
>>> whatever
<function whatever at 0x00AF5F30>
: Yani
, sizin örnek kullanmak. Biz, örneğin, nesnenin bir öznitelik bakabilirsiniz: cevap olarak>>> whatever.func_name
'whatever'
Sorunuzun - whatever()
değil bir yöntem file.py
ait olduğunu. file.py
genel ad alanında whatever
adına bağlı bir işlev nesnesi olarak düşünmek daha iyidir.
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__d
oc__': None, 'whatever': <function whatever at 0x00AF5EB0>}
Ya da başka bir açıdan bakmak, tamamen farklı bir nesneye ad whatever
bağlama bizi durduramaz:
>>> whatever
<function whatever at 0x00AF5F30>
>>> whatever = "string"
>>> whatever
'string'
fonksiyon nesneleri oluşturmak için başka yolları da vardır. Örneğin, için:
>>> somelambda = lambda x: x * 2
>>> somelambda
<function <lambda> at 0x00AF5F30>
bir yöntem olup, bir fonksiyon, bir nesnenin öznitelik gibidir. Bunu bir yöntem kılan, yöntemlerin nesneye bağlı olmasıdır. Bu, nesnenin normalde self
olarak adlandırdığımız ilk bağımsız değişken olarak işleve geçmesine neden olur.
>>> SomeClass.somemethod
<unbound method SomeClass.somemethod>
>>> someobject.somemethod
<bound method SomeClass.somemethod of <__main__.SomeClass instance at 0x00AFE030
Biz nesne üzerinde bir bağımlı yöntem olduğunu görebiliyorum:
>>> class SomeClass:
... def somemethod(one="Not Passed", two="Not passed"):
... print "one = %s\ntwo = %s" % (one,two)
...
>>> someobject = SomeClass()
en öznitelik olarak somemethod
bakalım:
en bir yöntem somemethod
ve bir örneği someobject
sahip bir sınıf SomeClass
tanımlayalım ve sınıfta bir ilişkisiz yöntem. Yani şimdi en yöntemini çağırın ve ne olduğunu görelim:
>>> someobject.somemethod("Hello world")
one = <__main__.SomeClass instance at 0x00AFE030>
two = Hello world
o somemethod
tarafından alınan ilk argüman nesnesidir ve ikinci argüman yöntem çağrısında İlk argüman olan bir bağımlı yöntem var gibi. en sınıfına yöntemini çağırın bakalım: biz uygun türde bir nesne vermeden yöntemini çağırmak için çalışıyoruz çünkü
>>> SomeClass.somemethod("Hello world")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method somemethod() must be called with SomeClass instance as first argument (got str instance instead)
Python yakınıyor.Bu yüzden "elle" nesne geçirerek bu sorunu giderebilirsiniz:
>>> SomeClass.somemethod(someobject,"Hello world")
one = <__main__.SomeClass instance at 0x00AFE030>
two = Hello world
Bu türde bir yöntem çağrıları kullanabilir - bir sınıf üzerinde bir yöntemi çağırma - Bir üst Belirli bir yöntemi çağırmak istediğinizde. Java Python bir dosya mutlaka senin kadar file
denilen bir sınıf içermiyor file.py
adlı aksine
(O take a function and bind it to class to make it a method mümkündür, ancak bu normalde hiç yapmanız gereken istediğiniz bir şey değildir.)
Hmm ... Dosya ad alanında sıradan bir işlev olarak "her türlü" ile çalışabilirsiniz.
Bu, file.java
adlı bir java dosyası olsaydı beklenebilir.
Python'da bir dosya, bir sınıf değil, yalnızca bir ad alanı (Java sınıfından daha Java paketi ile karşılaştırılabilir) olan bir modüldür. file
modülü/ad whatever_func
isimli sıradan bir fonksiyonu ve bir yöntem whatever_meth
sahip olan bir sınıf SomeClass
içeren Yukarıdaki örnekte
def whatever_func():
print "What ever function"
class SomeClass(object):
def whatever_meth(self):
print "What ever method"
: Bu örnek file.py
düşünün.
ve işlev ve yöntemlerin birbirleriyle eş anlamlı olduğunu düşündüm. – Amarghosh
@Amarghosh: Hayır. Yöntemler, bir sınıfa bağlı tanımlayıcılardır. – nosklo
Terminoloji inanıyorum diller arasında değişir - java her şey bir yöntemdir - statik veya örnek. – Amarghosh