Yöntemler özniteliklerdir. Sadece kalınabilir nesneler olurlar.
iki adımdır; özniteliği bulmak (bu durumda, özniteliği sınıfta arar ve bunu bir tanımlayıcı olarak görür), sonuçta ortaya çıkan nesneyi, bir yöntemi çağırır.
, yeni bir değere o ismi yeniden bağlamanız: c.setAttr = 'something else'
bir setattr()
operasyonu olurdu. Eğer alma ve sınıfın örneklerinde özellikleri ayarlayarak kesmek istiyorsa
, sen attribute access hooks, __getattr__
, __setattr__
ve __delattr__
sağlayabilir. Bir örneğine bir yöntem eklemek istiyorsa
, bir yöntem nesnesi üreten bir descriptor object olarak işlev tedavi etmek gerekir:
>>> class Foo: pass
...
>>> foo = Foo() # instance
>>> def bar(self): pass
...
>>> bar
<function bar at 0x10b85a320>
>>> bar.__get__(foo, Foo)
<bound method Foo.bar of <__main__.Foo instance at 0x10b85b830>>
dönüş değeri function.__get__()
arasında verildiğinde bir Örnek ve bir sınıf, bağlı bir yöntemdir. Bu yöntemin çağrılması, örneğe bağlı olan self
ile temel işlevi çağırır.
Ve tanımlayıcılardan bahsetmişken, property()
function da bir tanımlayıcı döndürür; bu, 'un öznitelikleri gibi davranmasını sağlar; Sırf o özellik için getattr()
, setattr()
ve delattr()
operasyonlarını durdurmak ve bir işlev çağrısı dönüştürebilirsiniz:
.bar
Erişme >>> class Foo:
... @property
... def bar(self):
... return "Hello World!"
...
>>> foo = Foo()
>>> foo.bar
"Hello World!"
sonra orijinal bar
yöntemini çağıran bar
özelliğin get kanca, çağrılan.
Neredeyse her durumda, callable()
işlevine ihtiyacınız olmayacak; API'nızı belgelendirir, yöntemler ve öznitelikler sağlarsınız ve API'nizin kullanıcısı, her bir özniteliği, denetlenebilir olup olmadığını görmek için test etmeden çözer. Özelliklerle, her durumda gerçekten kalible olan öznitelikleri sağlama esnekliğine sahipsiniz.
Sınıf dökümantasyonu, hangi özelliklerin çağrılması gereken yöntemler olduğunu ve değeri güvenli bir şekilde değiştirebileceğiniz nitelikler olduğunu söylemelidir. – chepner