天天看点

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)