装饰器简介
在类中对某个方法使用装饰器,该类的对象就可以像调用属性一样去调用该方法,给对应属性增加set和get方法。
实例:
class Employee:
@property
def salary(self):
print('salary is ...')
emp = Employee()
emp.salary # salary is ...
但是不可以进行赋值:
emp.salary = 1000 # AttributeError: can't set attribute
如果像进行赋值,我们会用set。
class Employee:
def __init__(self,name,salary):
self.__name = name
self.__salary = salary
@property
def salary(self):
return self.__salary
@salary.setter
def salary(self,salary):
self.__salary = salary
emp1 = Employee('123',213312)
print(emp1.salary)
面向对象的三大特征
下面这幅图片是继承的形象解释:
python支持多继承,继承的顺序是由写继承类的顺序,用mro()函数即可以看继承了哪些类。
class Animal:
def say():
print('Animal!')
return
class EatMeat:
pass
class Dog(EatMeat,Animal):
def say():
print('Dog!')
return
class Cat(Animal):
def say():
print('Cat')
return
dog = Dog()
cat = Cat()
print(Dog.mro())
# [<class '__main__.Dog'>, <class '__main__.EatMeat'>, <class '__main__.Animal'>, <class 'object'>]
多态:
class Animal:
def say():
print('Animal!')
return
class EatMeat:
pass
class Dog(EatMeat,Animal):
def say(self,number):
print('Dog!{0}'.format(number))
return
class Cat(Animal):
def say(self,number):
print('Cat!{0}'.format(number))
return
dog = Dog()
cat = Cat()
dog.say(1) #Dog!1
cat.say(2) #Cat2
运算符重载
python支持运算符的重载操作,所谓运算符重载,就是把python中自带的一些运算函数(由于每个类都继承Object类,而Object类中有这些运算函数)按照自己的意思进行运算。python中处处皆对象!
class MyOperator:
def __init__(self,a,b):
self.a = a
self.b = b
def __str__(self):
return ('{0} plus {1} is {2}'.format(self.a,self.b,self.a+self.b))
op = MyOperator(2,3)
print(op) #2 plus 3 is 5