面向对象进阶(2)

__slots__魔法

我们讲到这里,不知道大家是否已经意识到,Python是一门动态语言。通常,动态语言允许我们在程序运行时给对象绑定新的属性或方法,当然也可以对已经绑定的属性和方法进行解绑定。但是如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义__slots__变量来进行限定。需要注意的是__slots__的限定只对当前类的对象生效,对子类并不起任何作用。

静态方法和类方法

@classmethod:获取自身类(cls)中的属性,并且可以更改.
classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等

                                                                    

子类在继承了父类的方法后,可以对父类已有的方法给出新的实现版本,这个动作称之为方法重写(override)。通过方法重写我们可以让父类的同一个行为在子类中拥有不同的实现版本,当我们调用这个经过子类重写的方法时,不同的子类对象会表现出不同的行为,这个就是多态(poly-morphism)。

例1: 

输入三个数字(私有),求三个数字的和,
尝试更改其中两个数字
"""
class Number(object):
def __init__(self,num1,num2,num3):
self._num1 = num1
self.__num2 = num2
self.__num3 = num3

@property
def num1(self):
print(self._num1)

@num1.setter
def(self,num):
self._num1 = num

def SUM(self):
print(self._num1 + self.__num2 + self.__num3)


number = Number(1,2,3)
# number.num1 = 10000
number.num1 = 1000
number.SUM()

例2:

                                                                                

                                                                       

                                             

列表生成式 :
a=(x for x in range(100) if x %2 == 0
print(a)
优点:计算速度快,以为一次性已经全部加载到内存中了,适合数据量不是太大的情况
缺点:占用内存
生成器 genter = (
a=(x for x in range(100) if x %2 == 0
优点:节约内存空间
缺点:计算速度慢,因为要生成

猜你喜欢

转载自www.cnblogs.com/yzm1020/p/11323267.html