python 面向對象-實例化(對象)


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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM