懷着萬分的羞恥和悲憤之情寫下這篇博客。下午考了一套筆試,編程題怎麼也通不過,代碼邏輯應該是沒有問題的,由於不允許使用本地IDE沒報錯信息一直沒發現問題所在。
剛剛把代碼再寫了一遍,我做題時候用的是python,雖然我對python其實不是很熟悉……但畢竟python寫代碼還是寫得比Java又簡潔又快啊。
把我的代碼簡化,整個思路就如下
class getMin():
def fun(self, arr, n):
print(arr[n-1])
if __name__ == "__main__":
arr = input().strip().split(" ")
n = int(input())
getMin.fun(arr, n)
兩個問題:
1、從鍵盤獲取到的arr是字符串,即便我split了,每一個元素仍然是字符串,而不是數值。
2、我這裏用了類去調用實例方法,我在本地pycharm上這樣子寫時,會報錯:
Parameter 'n' unfilled..
其大意是fun方法需要一個叫n的參數,但是我沒有傳過去。
很是費解,明明傳了呀。
後來想到fun應該是實例方法吧,不能直接用類調用?
正解了。
python類中實例方法(第一個參數爲self)的一般只能用實例去調用,類其實也可以調用,但是類需要再傳遞一個實例,既然你都實例出來了,就沒必要再類調用了吧==
而python中的類方法會有一個@classmethod的函數修飾符,第一個參數會是cls,類方法可以被類和實例調用。當然了,類方法可以訪問類屬性不能訪問實例屬性。
順便,python中還有一個靜態方法,與類方法類似,有@staticmethod的修飾符,可以訪問類屬性不能訪問實例屬性,與類方法不同的是,靜態方法可以被類和實例調用。
原代碼如下:
class getMin():
# 實例方法
def fun(self, arr, n):
print(arr[n-1])
# 類方法
@classmethod
def class_fun(cls):
print("this is class function")
if __name__ == "__main__":
arr = input().strip().split(" ")
int_arr = []
for item in arr:
int_arr.append(int(item))
n = int(input())
instance = getMin()
# 用實例調用實例方法
instance.fun(int_arr, n)
# 用類調用方法
getMin.fun(instance, int_arr, n)
# 實例調用類方法
instance.class_fun()
# 類調用類方法
getMin.class_fun()
例子:
class getMin():
class_pro = "class_pro"
def __init__(self, pro):
self.instance_pro = pro
def instance_fun(self):
print(getMinNum.class_pro)
print(self.instance_pro)
@classmethod
def class_fun(cls):
print(getMinNum.class_pro)
# print(getMinNum.instance_pro) 報錯
@staticmethod
def static_fun():
print(getMinNum.class_pro)
# print(getMinNum.instance_pro) 報錯
if __name__ == "__main__":
instance = getMinNum("pro")
instance.instance_fun()
getMinNum.instance_fun(instance)
print("---------------")
instance.class_fun()
getMinNum.class_fun()
print("---------------")
instance.static_fun()
getMinNum.static_fun()
流下不學無術的眼淚。