Python类总结-字段,方法,属性区别及StaticMethod, Property,私有字段和私有属性

时间:2023-07-18 14:42:25
  • 类包含下列
    • 静态属性
    • 动态属性
    • 静态方法
    • 动态方法
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)