Python基础总结13(类和对象)

2018-10-18  本文已影响0人  zxhlcl

一、静态方法和类方法

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
星期五

'''
上一篇 下一篇

猜你喜欢

热点阅读