Dalam python, saya ingin kelas memiliki beberapa "konstanta" (praktis, variabel) yang akan umum di semua subclass. Apakah ada cara untuk melakukannya dengan sintaks yang ramah? Saat ini saya menggunakan:
class Animal:
SIZES=["Huge","Big","Medium","Small"]
class Horse(Animal):
def printSize(self):
print(Animal.SIZES[1])
dan saya bertanya-tanya apakah ada cara yang lebih baik untuk melakukannya atau cara melakukannya tanpa harus menulis "Animal." sebelum ukuran. Terima kasih! sunting: lupa menyebutkan bahwa kuda mewarisi dari binatang.
SIZES
tidak pernah berubah, pasti menggunakan tuple bukan daftar. Seperti begitu("Huge","Big","Medium","Small")
Jawaban:
Karena
Horse
ini adalah subkelas dariAnimal
, Anda bisa mengubahnyadengan
Namun, Anda harus ingat itu
SIZES[1]
berarti "besar", jadi mungkin Anda dapat meningkatkan kode Anda dengan melakukan sesuatu seperti:Atau, Anda bisa membuat kelas menengah:
HugeAnimal
,BigAnimal
, dan sebagainya. Itu akan sangat membantu jika setiap kelas hewan akan mengandung logika yang berbeda.sumber
Anda dapat
SIZES
menggunakanself.SIZES
(dalam metode instance) ataucls.SIZES
(dalam metode kelas).Bagaimanapun, Anda harus secara eksplisit tentang di mana menemukannya
SIZES
. Alternatifnya adalah dengan memasukkanSIZES
modul yang berisi kelas-kelas, tetapi kemudian Anda perlu mendefinisikan semua kelas dalam satu modul.sumber
sumber
Memperluas jawaban betabandido, Anda bisa menulis fungsi untuk menyuntikkan atribut sebagai konstanta ke dalam modul:
sumber
print SIZE_BIG
di luar kelas akan sama? Apakah ini dapat dieditAnimal.SIZE_HUGE = 'Small'
?