常見的兩種類的定義方式如下:
class Student: def __init__(self):#兩者之間的區別 self.name = None self.score = None def __init__(self, name, score): self.name = name self.score = score
區別很明顯,前者在__init__方法中,只有一個self,指的是實例的本身,但是在方法的類部,包含兩個屬性,name, score
下面的這個即是在定義方法時,就直接給定了兩個參數,
針對這樣的兩個,之前不解的地方,是如何實例化,第二個很明顯就是直接實例化時,傳入相應的參數,而第一種,則需要實例化之后,對屬性進行賦值
# student = Student("sansan", 90) student = Student() student.name= "sansan" student.score = 90 # susan = Student("sunny", 78) susan = Student() susan.name = "susan" susan.score = 8
即顯示了兩種實例化的方法, 注釋的部分即是在創建的時候就直接傳入參數
那么這兩者的區別,在哪里?
- 第一種的區別,他定義了這樣一種類,他可以是一個空的結構,比如學生的表,當學生還沒有進行考試時,他已經有了學生的姓名和成績,當新的數據來的時候,可以直接添加進來。這個可以很方便的進行,
- 第二種,則需要必須傳值,不允許為空。當然第二種對於已有數據的導入是很方便的,在語句上減少了很多
class Student: def __init__(self):#兩者之間的區別 self.name = None self.score = None # def __init__(self, name, score): # self.name = name # self.score = score def print_score(self): print("%s score is %s" % (self.name, self.score)) def get_grade(self): if self.score >= 80: return "A" elif self.score >= 70: return "B" else: return "C" # student = Student("sansan", 90) student = Student() student.name= "sansan" student.score = 90 # susan = Student("sunny", 78) susan = Student() susan.name = "susan" susan.score = 8 student.print_score() susan.print_score() print(susan.get_grade()) print(student.get_grade())
以上是一個很簡單的,兩者比較,
兩者都在上述代碼中進行了簡單的實現,自己進行相應的注釋
->常常出現在python函數定義的函數名后面,為函數添加元數據,描述函數的返回類型,從而方便開發人員使用。比如:
通常的寫法是:
def attrs(self) -> _Attrs:
pass
這種寫法通常是寫在函數的函數名后面
def add(x, y) -> int:
return x+y
這里面,元數據表明了函數的返回值為int類型。
,-> _Attr則表明函數返回的是一個外部可訪問的類的私有變量。