Mr.Li--python-高级编程

2017-06-05  本文已影响0人  界面大叔

is,==的区别

a is b-->判断a和b是否指向同一块内存空间

a==b-->判断a和b指向的空间里的内容是否一样

深拷贝,浅拷贝

浅拷贝

浅拷贝是对于一个对象的顶层拷贝

拷贝的是内存空间,并不是拷贝内容

深拷贝是对于一个对象所有层次的拷贝(递归)

浅拷贝对于不可变和可变类型的copy不同

a=[1,2,3]               --------------列表

b=copy.copy(a)

这时打印两个变量的地址不同,如果a附加值,b不会变

a=(1,2,3)

b=copy.copy(a)

这时打印两个变量的地址一样,如果a附加,b也会得到相同的值

私有属性添加getter和setter方法:

classMoney(object):

    def__init__(self):

        self.__money =0

    defgetMoney(self):

        returnself.__money

    defsetMoney(self, value):

        if isinstance(value, int):

            self.__money = value

        else:

            print("error:不是整型数字")

使用property升级getter和setter

classMoney(object):

    def__init__(self):

        self.__money =0

    defgetMoney(self):

        returnself.__money

    defsetMoney(self, value):

        ifisinstance(value, int):

            self.__money = value

        else:

            print("error:不是整型数字")

    money = property(getMoney, setMoney)

运行结果:

In [1]:fromget_setimportMoney

In [2]:

In [2]: a = Money()

In [3]:

使用property取代getter和setter方法

In [3]: a.money

Out[3]:0

In [4]: a.money =100

In [5]: a.money

Out[5]:100

In [6]: a.getMoney()

Out[6]:100

@property成为属性函数,可以对属性赋值时做必要的检查,并保证代码的清晰短小,主要有2个作用

·将方法转换为只读

·重新实现一个属性的设置和读取方法,可做边界判定

classMoney(object):

    def__init__(self):

        self.__money =0

    @property

    defmoney(self):

        returnself.__money

    @money.setter

        defmoney(self, value):

            ifisinstance(value, int):

                self.__money = value

            else:

                print("error:不是整型数字")

运行结果

In [3]: a =Money()

In [4]:

In [4]:

In [4]: a.money

Out[4]:0

In [5]: a.money

=100

In [6]: a.money

Out[6]:100

上一篇下一篇

猜你喜欢

热点阅读