1、構造函數 __init__()
#coding=utf-8 class Student(): name = "" age = 0 def __init__(self): #構造函數 pass def do_homework(self): print(self.name +"do homework") student1 = Student() student2 = Student() student3 = Student()
實例化的時候,python 會自動的調用構造函數,不需要去顯示調用,如果非要調,也可以
#coding=utf-8 class Student(): name = "" age = 0 def __init__(self): #構造函數 pass def do_homework(self): print(self.name +"do homework") student1 = Student() a = student1.__init__() print(type(a)) # Project/python_ToolCodes/test6.py" # <type 'NoneType'>
這個說明 顯示調用構造函數沒有什么特別的,跟普通函數沒區別,且無返回值。如果非要返回
#coding=utf-8 class Student(): name = "" age = 0 def __init__(self): #構造函數 return "111" def do_homework(self): print(self.name +"do homework") student1 = Student() a = student1.__init__() print(type(a)) # Project/python_ToolCodes/test6.py" # Traceback (most recent call last): # File "/Users/anson/Documents/Project/python_ToolCodes/test6.py", line 13, in <module> # student1 = Student() # TypeError: __init__() should return None
這就跟Java 一樣了,構造函數無返回值,如果非要強制返回,那就報錯了,因為python 和Java一樣 不允許在構造函數中返回
這樣也算是啥也不返回,和不寫return 是一樣的
#coding=utf-8 class Student(): name = "" age = 0 def __init__(self): #構造函數 return def do_homework(self): print(self.name +"do homework") student1 = Student() a = student1.__init__() print(type(a)) # Project/python_ToolCodes/test6.py" # <type 'NoneType'>
2、帶參構造函數 __init__(self,name,age):用來初始化對象的屬性
#coding=utf-8 class Student(): name = "" age = 0 def __init__(self,name,age): #構造函數 self.name = name self.age = age def do_homework(self): print(self.name +"do homework") student1 = Student("ansonw",26) print("name:"+student1.name) print("age:"+str(student1.age)) # Project/python_ToolCodes/test6.py" # name:ansonw # age:26
3、類變量和實例變量(關於類變量的使用方法,似乎與Java 不同)
Student.name 和 student1.name
#coding=utf-8 class Student(): name = "kiki" age = 0 def __init__(self,name,age): #構造函數 self.name = name self.age = age def do_homework(self): print(self.name +"do homework") student1 = Student("ansonw",26) print("實例變量=>name:"+student1.name) print("類變量=>name:"+Student.name) # 實例變量=>name:ansonw # 類變量=>name:kiki
但是,類是不需要名字和年齡的,所以這里類有名字為"kiki" 是不合理的
4、__dict__python內置變量打印,對象的內容和類的內容
student1.__dict__
對象:
#coding=utf-8 class Student(): name = "" age = 0 def __init__(self,name,age): #構造函數 self.name = name self.age = age def do_homework(self): print(self.name +"do homework") student1 = Student("ansonw",26) print(student1.__dict__) # [Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py" # {'age': 26, 'name': 'ansonw'}
類:
#coding=utf-8 class Student(): name = "" age = 0 def __init__(self,name,age): #構造函數 self.name = name self.age = age def do_homework(self): print(self.name +"do homework") student1 = Student("ansonw",26) print(Student.__dict__) #[Running] python -u "/Users/anson/Documents/Project/python_ToolCodes/test6.py" #{'__module__': '__main__', 'do_homework': <function do_homework at 0x10ab0d758>, 'name': '', 'age': 0, '__doc__': None, '__init__': <function __init__ at 0x10ab0d140>}
5、python 中的self 與this
- Java 中的用this 來指代當前對象,python中可以用this,但是建議使用self
- 類方法定義時,必須要帶上self
- 與Java一樣,如果沒有顯示重寫構造方法,python會有一個默認的無參構造方法
-
def __init__(self,name,age): #構造函數 self.name = name self.age = age def do_homework(self): print(self.name +"do homework")
- 類方法倍調用時,不需要帶self,因為python自動給我們加上了這個入參
-
student1.do_homework()