懂得java和python類變量和類的成員變量。本站提示廣大學習愛好者:(懂得java和python類變量和類的成員變量)文章只能為提供參考,不一定能成為您想要的結果。以下是懂得java和python類變量和類的成員變量正文
最恐怖的不是出錯而是一向都沒發明毛病,直到如今我才曉得本身對類變量的懂得有成績。
年夜概能夠或許是由於不經常使用類變量的緣由吧,一向沒有發明這個成績。比來在看C++時才曉得了類變量究竟是甚麼?
之前我一向認為類變量和成員變量的獨一差別是類變量可以經由過程類名直接拜訪,是靜態的。而成員變量須要實例化一個類後經由過程實例來拜訪。
切切沒想到疏忽了類變量在一個類中只要一個,各個實例中的都是統一個的,在一個實例中修正會影響其他實例中的類變量...(固然平凡也沒有由於這個而惹起甚麼bug,然則照樣要補上認知的破綻)。
這裡有效java和python寫的2個例子:
public class OO{
public static String s;
public String m;
static{
s = "Ever";
}
public static void main(String[] args){
OO o1 = new OO();
OO o2 = new OO();
o1.m = "Once";
//分歧實例中的類變量值/地址雷同
System.out.println(o1.s);
System.out.println(o2.s);
System.out.println(o1.s.hashCode());
System.out.println(o2.s.hashCode());
o1.s = "123";
System.out.println(o2.s);//更改類變量後影響了其他實例
System.out.println(o1.m.hashCode());
System.out.println(o2.m.hashCode());//NullPointerException
//成員變量具有分歧的地址
}
}
#!/bin/python
class B:
def whoami(self):
print("__class__:%s,self.__class__:%s"%(__class__,self.__class__))
class C(B):
count = 0
def __init__(self):
super(C,self).__init__()
self.num = 0
def add(self):
__class__.count += 1
self.num += 1
def print(self):
print("Count_Id:%s,Num_Id:%s"%(id(__class__.count),id(self.num)))
print("Count:%d,Num:%d"%(__class__.count,self.num))
i1 = C()
i2 = C()
i1.whoami()
i2.whoami()
#i1的成員變量增長了1次,i2的成員變量增長了2次,類變量共增長了3次
i1.add()
i2.add()
i2.add()
i1.print()
i2.print()
以上就是本文的全體內容,今天假期就停止了,願望年夜家積極地投入到任務中,持續存眷小編為年夜家分享的文章。