程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

java python構造器&變量的區別

編輯:Python

一、java構造器

Java構造器的本質作用就是為對象初始化,即為實例變量初始化,賦初值;

而不是創建對象,創建對象時通過new關鍵字來完成的,當使用new 關鍵字時就會為該對象在堆內存中開辟一塊內存,只等構造器來初始化這塊內存,為實例變量賦初始值。在未賦初始值之前是默認值。看代碼中的構造器和編譯後構造器是不一樣的,編譯後的構造器包含了更多的內容。

構造器可以用來在初始化對象時初始化成員變量。

public class mystudent {
Integer age;
String name;
public static String addr = "beijing";
mystudent(Integer age,String name){
this.age = age;
this.name = name;
}
}

構造器,是用來初始化成員變量age 和 name的。

這裡的 age,與name是實例變量,類是不能直接調用,只能通過對象來調用。

但是 addr是 靜態變量,類是可以直接調用的

mystudent.addr

靜態變量和實例變量的區別是:

  • 靜態變量被所有實例對象共享,在內存中只有一個副本,當且僅當類初次加載時被初始化。
  • 實例變量是實例對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個實例對象擁有的副本互不影響。


 

二、python __init__ 初始化

python 沒有構造器,但是有__new__ 與  __init__

__new__ 創建對象

__init__ 初始化對象

Python類變量、實例(成員)變量和局部變量

原文地址:

 Python類變量、實例(成員)變量和局部變量_青果HA的博客-CSDN博客

 

2.1.類變量

下面介紹類變量的兩種定義方式、兩種讀取方式、在類裡面的調用方式

定義

1.類裡定義的,與構造函數、普通函數是一個級別縮進的。(下面例子裡的num)

2.在類外定義的,直接用類名.變量名新增類變量。(下面例子裡的myvar)

讀取

1.直接用類名的屬性 獲取:類名.類變量  (下面例子裡的Member.num和Member.myvar)

2.先實例化類,實例化對象的屬性 獲取 :實例對象.類變量 (下面例子裡的M.num和M.myvar)

調用

1. 在類裡面調用:類名.類變量,不能直接用類變量,即應為Member.num而不是num

# -*- coding: utf-8 -*-
class Member():
num=2 #類變量,可以直接用類調用,或用實例對象調用
def __init__(self,x,y):
self.x=x #實例變量(成員變量),需要它是在類的構造函數內以self.開頭來定義的
self.y=y
def add(self):
total=2 #局部變量
self.vara=3 # 雖是以self.給出,但並沒有在構造函數中進行初始化
self.varb=4
fina=(self.x+self.y)*total
return fina
def fuc(self,a,b):
self.varc=a #成員變量,他們在成員函數fuc()中定義
self.vard=b
self.x+=2
self.y+=2
self.vara+=3
self.varb+=Member.num
Member.myvar = 'huhuh'
print(Member.num,Member.myvar)
M=Member(1,2)
print(M.num,M.myvar)

2.2 實例(成員)變量


(1)構造函數裡的成員變量:

定義:在__init__(self,成員變量)

讀取:只能實例對象.成員變量,不能類名.成員變量,即只能M.x不能Member.x

調用:構造函數的成員變量,顧名思義:在類實例化的時候,就需要給該變量賦值。類裡的普通函數可直接調用該變量,方式為:self.成員變量,

作用范圍:類裡面的全局變量,其值可以被其他函數修改

(2)普通函數裡的成員變量

定義:在類裡的普通函數def xxx(self,成員變量)

讀取:只能實例對象.成員變量,不能類名.成員變量,即只能M.vara不能Member.vara

調用:方式為self.成員變量,只有在類實例化後調用該普通函數,此時,該成員變量才會生,看下面的例子:必須先調用add函數後,fuc函數裡的self.vara和self.varb才會正常執行,不報錯。

作用范圍:類裡面的全局變量,其值可以被其他函數修改

3.局部變量

局部變量相對就簡單很多了,跟不在類裡面的def函數的局部變量是一樣的。

 作用范圍:該函數內部

總結:成員函數

1.不同點

(1)構造函數裡的成員變量,在類實例化之後,就可以使用

(2)在類裡普通函數裡的 成員變量,只能先調用該函數,才能使用該成員變量。

2.相同點:

(1)在類裡,都是全局的


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved