天天看點

python特性和屬性的差別_Python類總結-字段,方法,屬性差別及StaticMethod, Property,私有字段和私有屬性...

類包含下列

靜态屬性

動态屬性

靜态方法

動态方法

class Province:

#靜态字段--屬于類,調用方法類.字段名

memo = "中國23個省之一"

#動态字段--屬于對象,調用方式執行個體化對象.字段名

def __init__(self, name, capital, leader):

self.Name = name

self.Capital = capital

self.Leader = leader

#動态方法--屬于對象

def sports_game(self):

print(self.Name + '正在開運動會')

#靜态方法--屬于類

@staticmethod

def Foo(): #去掉self參數, 靜态方法屬于類

print('每個省要帶頭反腐')

@property #把方法變成一個特性

def Bar(self):

print(self.Name)

return 'something'

hb = Province('河北','石家莊','李陽') #hb = 類定義中self參數

sd = Province('山東','濟南','王盛輝')

print(hb.Capital)

print(hb.memo) #動态的對象可以通路靜态類的靜态字段

# print(Province.Name) #靜态類不可以通路動态字段,name,capital,leader為動态字段

print(Province.memo)

hb.sports_game() #對象可以通路動态方法

sd.sports_game()

Province.Foo() #靜态類可以通路靜态方法

hb.Foo() #動态對象可以通路靜态方法

#通路特性

hb.Bar #無需括号, 把方法通路形式轉變為字段通路形式

print(hb.Bar)

>>>>>>>>>

石家莊

中國23個省之一

中國23個省之一

河北正在開運動會

山東正在開運動會

每個省要帶頭反腐

每個省要帶頭反腐

河北

河北

something

私有字段,私有方法-- __變量名

class Province:

#靜态字段--屬于類,調用方法類.字段名

memo = "中國23個省之一"

#動态字段--屬于對象,調用方式執行個體化對象.字段名

def __init__(self, name, capital, leader,flag):

self.Name = name

self.Capital = capital

self.Leader = leader

#定義私有字段,__變量名

self.__Thailand = flag

#動态方法--屬于對象

def sports_game(self):

print(self.Name + '正在開運動會')

#靜态方法--屬于類

@staticmethod

def Foo(): #去掉self參數, 靜态方法屬于類

print('每個省要帶頭反腐')

@property #把方法變成一個特性

def Bar(self):

print(self.Name)

return 'something'

#間接調用私有變量

def show(self):

print(self.__Thailand)

#構造一個Thailand函數,傳回類中的私有變量__Thailand

@property#構造函數

def Thailand(self):

return self.__Thailand

#定義私有方法

def __sha(self):

print('我是Alex')

#類中可以通路私有方法

def Foo2(self):

self.__sha()

japan = Province('日本','濟南','王盛輝',True)

# print(japan.__Thailand) #出錯,私有變量不可通路

japan.show()

japan.Foo2()

print(japan.Thailand)

japan._Province__sha() #可以通過_Province__sha()顯式調用私有變量,但不建議

>>>

True

我是Alex

True

修改私有屬性的方法-Setter

class Province(object): #使用構造函數setter時候需要繼承object

#靜态字段--屬于類,調用方法類.字段名

memo = "中國23個省之一"

#動态字段--屬于對象,調用方式執行個體化對象.字段名

def __init__(self, name, capital, leader,flag):

self.Name = name

self.Capital = capital

self.Leader = leader

#定義私有字段,__變量名

self.__Thailand = flag

#動态方法--屬于對象

def sports_game(self):

print(self.Name + '正在開運動會')

#靜态方法--屬于類

@staticmethod

def Foo(): #去掉self參數, 靜态方法屬于類

print('每個省要帶頭反腐')

@property #把方法變成一個特性

def Bar(self):

print(self.Name)

return 'something'

#間接調用私有變量

def show(self):

print(self.__Thailand)

#構造一個Thailand函數,傳回類中的私有變量__Thailand

@property#構造函數,隻讀

def Thailand(self):

return self.__Thailand

#推薦修改私有變量的方法

@Thailand.setter#構造函數, 可以修改@函數名.setter(self,傳個值)

def Thailand(self,value):

self.__Thailand = value

#定義私有方法

def __sha(self):

print('我是Alex')

#類中可以通路私有方法

def Foo2(self):

self.__sha()

japan = Province('日本','濟南','王盛輝',True)

print(japan.Thailand)

japan.Thailand = False

print(japan.Thailand)