Ketika saya memiliki metode reguler untuk memanggil metode lain di kelas, saya harus melakukan ini
class test:
def __init__(self):
pass
def dosomething(self):
print "do something"
self.dosomethingelse()
def dosomethingelse(self):
print "do something else"
tetapi ketika saya memiliki metode statis, saya tidak dapat menulis
self.dosomethingelse()
karena tidak ada contoh. Bagaimana yang harus saya lakukan dengan Python untuk memanggil metode statis dari metode statis lain dari kelas yang sama?
Sunting: berantakan sekali. Oke, saya edit kembali pertanyaannya ke pertanyaan awal. Saya sudah memiliki jawaban untuk pertanyaan kedua yang ada di komentar Peter Hansen. Jika Anda pikir saya harus membuka pertanyaan lain untuk jawaban yang sudah saya miliki, tolong beri tahu saya.
python
static-methods
Pablo
sumber
sumber
Jawaban:
class.method
harus bekerja.sumber
sumber
Test.static_method_to_call()
harus bekerja dari metode non-statis dan non-kelas lain dari kelas ini juga, bukan? (... dan mungkin kelas lain juga?)Test.static_method_to_call()
akan bekerja dari mana saja.CATATAN - sepertinya pertanyaannya telah berubah beberapa. Jawaban atas pertanyaan tentang bagaimana Anda memanggil metode instance dari metode statis adalah Anda tidak bisa tanpa meneruskan instance sebagai argumen atau membuat instance itu di dalam metode statis.
Berikut ini sebagian besar untuk menjawab "bagaimana Anda memanggil metode statis dari metode statis lain":
Ingatlah bahwa ada adalah perbedaan antara metode statis dan metode kelas dengan Python. Metode statis tidak mengambil argumen pertama implisit, sedangkan metode kelas mengambil kelas sebagai argumen pertama implisit (biasanya
cls
berdasarkan konvensi). Dengan mengingat hal itu, inilah cara Anda melakukannya:Jika itu metode statis:
Jika itu metode kelas:
sumber
cls.dosomethingelse()
dari dalam definisi kelas.cls.dosomethingelse()
dari dalam metode kelas itu sendiri. Sama seperti Anda hanya dapat menggunakanself
dari dalam metode instance itu sendiri.Oke, perbedaan utama antara metode kelas dan metode statis adalah:
sumber
Anda tidak dapat memanggil metode non-statis dari metode statis tetapi dengan membuat instance di dalam metode statis .... seharusnya berfungsi seperti itu
berharap itu akan membantu Anda :)
sumber
@classmethod
untuk mendeklarasikan metode Anda, dan menggunakancls.dosomethingelse()
dalamcls.dosomething()
- lebih buruk dalam hal kinerja (membuat instance objek hanya untuk mendapatkan akses ke metode statis) dan keterbacaan (tidak langsung, dan saya membayangkan jika semacam itu pola menjadi boilerplate, seluruh basis kode bisa menjadi sangat sulit bagi manusia untuk mengurai)Jika ini tidak bergantung pada kelas atau instance, mengapa tidak menjadikannya sebagai fungsi? Karena ini akan tampak seperti solusi yang jelas. Kecuali tentu saja Anda pikir itu akan perlu ditimpa, subkelas dll. Jika demikian maka jawaban sebelumnya adalah taruhan terbaik. Semoga saja saya tidak akan dihargai karena hanya menawarkan solusi alternatif yang mungkin atau mungkin tidak sesuai dengan kebutuhan seseorang;).
Karena jawaban yang benar akan tergantung pada kasus penggunaan kode tersebut;) Selamat menikmati
sumber