1. python 數據變數 x.real什麼意思
如果x不是一個自定義類的實例的話,那麼x是python內建對象,復數~
x.real取得是實部
2. Python類里的類變數和實例對象變數的區別
類變數也叫靜態變數,也就是在變數前加了static
的變數;
實例變數也叫對象變數,即沒加static
的變數;
區別在於:
類變數和實例變數的區別在於:類變數是所有對象共有,其中一個對象將它值改變,其他對象得到的就是改變後的結果;而實例變數則屬對象私有,某一個對象將其值改變,不影響其他對象;
例:
public
class
A{
static
int
a
=
0;
//類變數
private
int
b
=
0;
//實力變數
}
public
class
B{
public
void
main
(String[]
args){
A
a1
=
new
A();
A
a2
=
new
A();
a1.a
=
3;
//
等同於
A.a
=
3;
a1.b
=
4
;
System.out.println(a2.a);
//結果為3
//類變數是針對所有對象的,所以a1改變a,a2的a也改變
System.out.println(a2.b);
//結果為0
//實例只改變自身的,所以a1對象的b改變,不影響對象a2的b變數
}
}
3. Python中的類變數、實例變數、局部變數
類體內,所有函數外定義。
所有實例對象共享。
只有通過類名調用時才能修改,通過實例調用時無法修改。
假設某類變數名為「name",如果用該類的某個實例x來為name賦值:x.name = 'xxx',實質是為該實例新定義了一個變數name。且之後無法再通過該實例調用類變數name了。因為使用實例調用某名為「xxx」變數時,若該實例沒有名為「xxx」的實例變數,則會去調用名為「xxx」的類變數;若有該名稱的實例變數,則該實例無法再直接調用該名稱對應的類變數。因此也不推薦通過實例來調用類變數。
即:通過類實例修改類變數的值時,實際是在定義新的與類變數同名的實例變數。
類體內,某函數(一般是__ init __ ())內定義。 「self.變數名」
因為是屬於某個具體實例的,因此不能通過類名訪問。
如果不在__ init __ () 中調用(該函數會在創建實例時自動調用一次),則只有調用該實例中定義目標實例變數的那個函數後,才能使用目標實例變數。因此最好在__ init __ () 中定義實例變數。
類體內,某函數內定義。
直接在函數內用「變數名=值」的方式進行定義。
函數執行完畢後,該局部變數即被銷毀。
4. python如何在一個類中訪問另一個類的變數
1234def aaa(): s = 5 return sprint aaa()
或者:
12345def aaa(): global s s = 5aaa()print s
要在函數外部訪問函數的內部變數,要麼使用return將其返回到外部,要麼用global定義為全局變數。推薦前一種。
def只是定義函數,你還沒有調用和執行該函數。此外,要在控制台輸出,你可以在函數內部寫上print s+3 ,然後調用函數aaa()。
或者定義一個類:
1234class aaa: s = 5b = aaa #初始化一個類的實例print b.s #當然,你也可以直接使用aaa.s
5. python實例成員實例變數
1、語法:
定義:對象.變數名
調用:對象.變數名
2、說明:
(1)首次通過對象賦值為創建,再次賦值為修改
x01=wife()
wife.name="張三" 此時為創建
wife.name="李四" 此時為修改
(2)通過在構造函數__init__中創建
wife("張三",24)
print(w01.name)
(3)、每個對象存儲一份,通過對象地址訪問。
3、作用:描述所有對象的共有數據。
實例方法:
1、語法
定義:def方法名稱(self,參數列表):
方法體
調用:對象地址.實例名稱(參數)
作用:所有對象共享方法。
對象是指構造函數,方法是指形為函數。
'''
class Studons:
def __init__(self,name,xibie,nianling,fenshu):
self.name=name
self.xibie=xibie
self.nianling=nianling
self.fenshu=fenshu
def dayin(self):
print("姓名:%s,性別:%s,年齡:%d,分數:%d"%(self.name,self.xibie,self.nianling,self.fenshu))
#定義函數根據姓名查找每個人的信息。
list01=[Studons("張無忌","女",2,98),
Studons("張老六","男",61,95),
Studons("三豐","男",31,95),
Studons("小麗麗","女",21,93),
]
def cha_name(name):
for item in list01:
if name==item.name:
# print(item.name,item.nianling)
item.dayin()
cha_name("小麗麗")
#2、
def fund_xus(names):
for itme in list01:
if itme.name==names:
return itme
print(fund_xus("小麗麗").name)
#查找所有女同學
def fund_nv(age):
list02 = []
for itme in list01:
if itme.xibie==age:
list02.append(itme)
return list02
ae=fund_nv("女")
for ime in ae:
ime.dayin()
#統計30歲以上的人的數量
def count_stud():
coun=0
for itme in list01:
if itme.nianling>=30:
coun+=1
return coun
print(count_stud())
#將所有學生的成績歸0
def list_0():
for itme in list01:
itme.fenshu=0
#獲取列表中所有人的名字
def pen_name():
name=[]
for itme in list01:
name.append(itme.name)
return name
print(pen_name())
#查找年齡 最大的學生對象
def max_nl():
maxt=list01[0]
for itme in range(len(list01)):
if maxt.nianling<list01[itme].nianling: span=""> </list01[itme].nianling:>
maxt=list01[itme]
return maxt
max_nl().dayin()
6. Python類和實例變數的理解與運用
9.3.5. 類和實例變數
一般來說,實例變數用於對每一個實例都是唯一的數據,類變數用於類的所有實例共享的屬性和方法:
class Dog:
kind = 'canine' # class variable shared by all instances
def __init__(self, name):
self.name = name # instance variable unique to each instance
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.kind # shared by all dogs
'canine'
>>> e.kind # shared by all dogs
'canine'
>>> d.name # unique to d
'Fido'
>>> e.name # unique to e
'Buddy'
正如在 術語相關 討論的, 可變 對象,例如列表和字典,的共享數據可能帶來意外的效果。例如,下面代碼中的 tricks 列表不應該用作類變數,因為所有的 Dog 實例將共享同一個列表:
class Dog:
tricks = [] # mistaken use of a class variable
def __init__(self, name):
self.name = name
def add_trick(self, trick):
self.tricks.append(trick)
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.add_trick('roll over')
>>> e.add_trick('play dead')
>>> d.tricks # unexpectedly shared by all dogs
['roll over', 'play dead']
這個類的正確設計應該使用一個實例變數:
class Dog:
def __init__(self, name):
self.name = name
self.tricks = [] # creates a new empty list for each dog
def add_trick(self, trick):
self.tricks.append(trick)
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.add_trick('roll over')
>>> e.add_trick('play dead')
>>> d.tricks
['roll over']
>>> e.tricks
['play dead']
總結後的知識點希望能幫到你
7. Python中類與實例的其他說明解釋
9.4. 一些說明
數據屬性會覆蓋同名的方法屬性。為了避免意外的名稱沖突,這在大型程序中是極難發現的 Bug,使用一些約定來減少沖突的機會是明智的。可能的約定包括:大寫方法名稱的首字母,使用一個唯一的小字元串(也許只是一個下劃線)作為數據屬性名稱的前綴,或者方法使用動詞而數據屬性使用名詞。
數據屬性可以被方法引用,也可以由一個對象的普通用戶(客戶)使用。換句話說,類不能用來實現純凈的數據類型。事實上,Python 中不可能強制隱藏數據——一切基於約定(如果需要,使用 C 編寫的 Python 實現可以完全隱藏實現細節並控制對象的訪問。這可以用來通過 C 語言擴展 Python)。
客戶應該謹慎的使用數據屬性——客戶可能通過踐踏他們的數據屬性而使那些由方法維護的常量變得混亂。注意:只要能避免沖突,客戶可以向一個實例對象添加他們自己的數據屬性,而不會影響方法的正確性——再次強調,命名約定可以避免很多麻煩。
從方法內部引用數據屬性(或其他方法)並沒有快捷方式。我覺得這實際上增加了方法的可讀性:當瀏覽一個方法時,在局部變數和實例變數之間不會出現令人費解的情況。
一般,方法的第一個參數被命名為 self。這僅僅是一個約定:對 Python 而言,名稱 self 絕對沒有任何特殊含義。(但是請注意:如果不遵循這個約定,對其他的 Python 程序員而言你的代碼可讀性就會變差,而且有些 類查看器 程序也可能是遵循此約定編寫的。)
類屬性的任何函數對象都為那個類的實例定義了一個方法。函數定義代碼不一定非得定義在類中:也可以將一個函數對象賦值給類中的一個局部變數。例如:
# Function defined outside the class
def f1(self, x, y):
return min(x, x+y)
class C:
f = f1
def g(self):
return 'hello world'
h = g
現在 f, g 和 h 都是類 C 的屬性,引用的都是函數對象,因此它們都是 C 實例的方法-- h 嚴格等於 g 。要注意的是這種習慣通常只會迷惑程序的讀者。
8. python 靜態方法可以訪問類方法嗎
Python的靜態方法和類成員方法都可以被類或實例訪問,兩者概念不容易理清,但還是有區別的:
1)靜態方法無需傳入self參數,類成員方法需傳入代表本類的cls參數;
2)從第1條,靜態方法是無法訪問實例變數的,而類成員方法也同樣無法訪問實例變數,但可以訪問類變數;
3)靜態方法有點像函數工具庫的作用,而類成員方法則更接近類似Java面向對象概念中的靜態方法。
實現靜態方法和類方法的兩種方式
一、在Python 2.3及之前,用staticmethod和classmethod類型對象包裝實現
例子如下(注意print里的說明):
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'
def staticmd():
print '靜態方法,無法訪問val1和val2'
smd = staticmethod(staticmd)
def classmd(cls):
print '類方法,類:' + str(cls) + ',val1:' + cls.val1 + ',無法訪問val2的值'
cmd = classmethod(classmd)
執行:
>>> mc = MyClass()
>>> mc.smd()
>>> mc.cmd()
>>> MyClass.smd()
>>> MyClass.cmd()
二、在Python 2.4及之後,用裝飾器(decorators)實現
裝飾器使用@操作符,例子如下:
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'
@staticmethod
def staticmd():
print '靜態方法,無法訪問val1和val2'
@classmethod
def classmd(cls):
print '類方法,類:' + str(cls) + ',val1:' + cls.val1 + ',無法訪問val2的值'
9. python 類變數和實例變數的區別
類變數定義在類的定義之後,實例變數則是以為self.開頭。例如:
class Foo(object):
val1= 'aa' #類變數
def __init__(self):
self.val2 = 'bb' #實例變數
val3= 'cc' #順便設置的變數不知道屬於什麼變數
print self.__class__.val1 #實例對象訪問類變數的另一種方法
實例對象可以訪問類變數和實例變數
但是類對象卻只能訪問類變數,在實例方法中的變數都不能訪問。
10. Python類方法可以訪問實例變數嗎
不可以。
因為類方法屬於類,調用非static變數需要實例,而類的載入先於實例的創建,故在靜態環境中,不可以訪問非靜態。