Rumah > Soal Jawab > teks badan
黄舟2017-04-18 09:43:46
Contoh yang boleh saya fikirkan ialah kaedah kelas sering digunakan sebagai pengganti untuk pembina (__init__
).
Berikut ialah contoh mudah:
class Calculator:
def __init__(self, *numbers):
self.numbers = numbers
def sum(self):
return sum(self.numbers)
def avg(self):
return sum(self.numbers)/len(self.numbers)
if __name__ == '__main__':
c = Calculator(1,2,3,4,5)
print(c.sum())
print(c.avg())
Ini adalah kelas kalkulator yang tidak berguna, tetapi jangan risau tentangnya Apakah yang perlu saya lakukan jika saya ingin membina kelas ini diberi urutan (Senarai atau Tuple)?
Malah, hanya gunakan ungkapan bintang:
numbers = [6,7,8,9,10]
c2 = Calculator(*numbers)
print(c2.sum())
print(c2.avg())
Tetapi kaedah kelas ialah pilihan lain pada masa ini:
class Calculator:
def __init__(self, *numbers):
self.numbers = numbers
def sum(self):
return sum(self.numbers)
def avg(self):
return sum(self.numbers)/len(self.numbers)
@classmethod
def fromseq(cls, seq):
return cls(*seq)
if __name__ == '__main__':
numbers = [6,7,8,9,10]
c3 = Calculator.fromseq(numbers)
print(c3.sum())
print(c3.avg())
Kami boleh menggunakan kaedah kelas dengan mudah untuk melaksanakan penggantian pembina Sebab utama ialah parameter kaedah kelas pertama menerima objek kelas, yang membolehkan kami memproses hujah yang dihantar oleh kaedah kelas kepada pembina standard, mencipta objek menggunakan kelas objek dan mengembalikannya.
Jika perkara ini diserahkan kepada kaedah contoh, akan ada kaedah penukaran tambahan menggunakan type(self)
Menggunakan kaedah statik memerlukan pengekodan keras nama kelas dalam kaedah, yang tidak begitu sesuai:
class Calculator:
...(略)...
@classmethod
def fromseq(cls, seq):
return cls(*seq)
def fromseq2(self, seq):
return type(self)(*seq) # 多一個步驟
@staticmethod
def fromseq3(seq):
return Calculator(*seq) # 哪一天這個類改名字了這裡也要改...
Jika anda ingin mengetahui lebih lanjut tentang kaedah contoh, kaedah kelas dan kaedah statik, anda boleh merujuk kepada:
Dalam keadaan apakah kaedah statik Python harus digunakan?
Panduan muktamad tentang cara menggunakan kaedah statik, kelas atau abstrak dalam Python
Soalan yang saya jawab: Python-QA
阿神2017-04-18 09:43:46
Tunggu sebentar dan tulis contoh~
python3
class 类方法演示(object):
类变量 = '哈哈'
def __init__(实例):
实例.实例变量 = '实例值'
def 测试1(实例): #实例方法
print('测试1')
print(实例)
@classmethod #类方法
def 测试2(此类): # 此类 就是 类方法演示 自身
print(此类)
print('测试2')
print(类方法演示.类变量)
print('----------------')
@staticmethod #静态方法
def 测试3(): # 这里可以不传递参数。
print(类方法演示.类变量)
print('测试3')
if __name__ == '__main__':
对象 = 类方法演示()
对象.测试1()
对象.测试2()
对象.测试3()
类方法演示.测试3()
Kedua-dua 类方法
dan 静态方法
boleh mengakses 类
类变量
, tetapi bukan 实例变量
. 静态变量
, nampaknya 闭包
hanya boleh dicapai melalui 静态变量
dalam python.