一、静态方法和类方法
1、类方法
@classmethod
def func(cls): -->其中cls指向类
应用场景:
2、静态方法
@staticmethod
def func( ):
应用场景:
1、实现函数的功能需要用到对象的属性,申明为对象方法
2、需要用到类的属性,申明为类方法
3、不需要用到对象以及类的属性和方法,直接申明为函数,就是静态方法
class MyMath:
pi=3.141952653
@classmethod
def circle(cls,radis):
return cls.pi*radis**2
@staticmethod
def sum(num1,num2):
return num1+num2
mathone=MyMath()
print(mathone.circle(10),MyMath.circle(10))
print(mathone.sum(10,20),MyMath.sum(10,20))
二、私有化
类中的内容默认的是公开的
1、私有化--将类的内容在类的外面隐藏
方法:在类的方法或属性前面加两个下划线
2、私有化原理
python中没有真正的私有化(没有从访问权限上去限制内容的访问)
在私有的属性名或方法名前加前缀"_类名"来阻止外部直接通过带两个下划线的名字去使用属性和方法
相当于系统修改了属性或方法的名字
class Person:
__hiddenname="Joke"
def __init__(self):
self.name="小明"
self.age=22
def show_info(self):
print(self.__dict__)
def __find(self):
print("find money")
p1=Person()
p1.show_info()
p1._Person__find()
'''
{'name': '小明', 'age': 22}
find money
'''
三、getter和setter
1、应用场景:
如果希望通过对象.属性获取属性值之前,再干点别的事情,可以给这个属性添加getter
如果希望在通过对象.属性给属性赋值之前,再干点别的事情,可以给这个属性添加setter
2、怎么添加setter和getter
getter:
(1)在属性名前加_
(2)添加属性对应的getter
@property
def 属性名(self):
函数体
(3)使用属性值的时候,通过没有带下划线的属性
setter:
如果要想添加setter必须先添加getter
@getter名.setter
def 属性名(self,参数):
做别的事情
self.属性名=处理后的值
class Number:
def __init__(self):
self.id=None
self._week=3
self.value=0
self.type=int
@property
def week(self):
if self._week==1:
return "星期一"
elif self._week==2:
return "星期二"
elif self._week==3:
return "星期三"
elif self._week==4:
return "星期四"
elif self._week==5:
return "星期五"
elif self._week==6:
return "星期六"
elif self._week==0:
return "星期天"
@week.setter
def week(self,week):
try:
if not isinstance(week,int):
raise TypeError("Expected a int")
if not 0 <= week <= 6:
raise ValueError("Expected a int number for 1 to 6")
except (TypeError,ValueError) as e:
print("You are a stupid guy!-->",e)
else:
print("A correct Number ,you are a smart guy")
self._week=week
Num=Number()
print(Num.week)
Num.week="aaa"
print(Num.week)
Num.week=8
print(Num.week)
Num.week=5
print(Num.week)
'''
星期三
You are a stupid guy!--> Expected a int
星期三
You are a stupid guy!--> Expected a int number for 1 to 6
星期三
A correct Number ,you are a smart guy
星期五
'''