类
定义
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾
class car(): # 定义小汽车这个类
weight = "5000kg" # 给车这个类定义一个重量的属性
def drive(self):# 定义驾驶方法
print("发动汽车,拉手刹,踩油门,转动方向盘,进行小汽车驾驶!") # 打印出驾驶方法
实例化对象
当我们定义一个类之后,我们可以通过实例化对象的方式对类里面的属性、方法进行调用。
c = car() # 实例化小汽车这个类
print("小汽车的重量是:"+c.weight) # 打印出重量这个属性的数值
c.drive() # 调用小汽车这类中驾驶这种方法
继承
定义
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
单继承
意味着只是继承于一个父类,继承意味着可以继承父类当中的属性、方法,我们在子类中是可以实例化子类的对象,之后通过子类的对象完成父类的方法、属性的调用。
继承的方法是,通过定义子类中的括号中写上要继承的父类类名。
class PassengerCar(): # 定义客车这个类
weight = "20t" # 给车这个类定义一个重量的属性
def drive(self): # 定义客车类中的驾驶方法
print("发动汽车,拉手刹,踩油门,转动方向盘,进行车驾驶!")
class Bus(PassengerCar): # 定义公交车这个类,并继承客车这个类
name = "东风路28路公交车" # 定义公交车名这个属性
weight = "25t" # 重写父类重量这个属性的值,属于多态的一种体现
多继承
继承的方法是,通过定义子类中的括号中写上要继承的父类类名(两个或两个以上)。
class Father(object): #父亲类
def __init__(self,money):
self.money = money
def play(self):
print("play")
def func(self):
print("func1")
class Mother(object): #母亲类
def __init__(self,faceValue):
self.faceValue = faceValue
def eat(self):
print("eat")
def func(self):
print("func2")
from Father import Father # 前一个是引进的文件的名称,后面是引进的那个文件中的类名
from Mother import Mother
class Child(Father,Mother): #孩子类继承父亲类和母亲类
def __init__(self,money,faceValue):
Father.__init__(self,money) #调用父类中的init,但是这里面的self是子类中的对象
Mother.__init__(self,faceValue)
from Child import Child
def main(): # 主函数实例化孩子类
c = Child(300,100)
print(c.money,c.faceValue)
c.play()
c.eat()
c.func() # 父亲、母亲类都有的方法
if __name__ == "__main__":
main()
需要注意的是,在父类方法名相同,默认调用的是在括号中排前面的父类中的方法,就是在继承的过程中会出现的。比如在继承时继承两个类,当两个类中有相同名称的方法时,我们调用的方法是继承中第一个类的方法
多态
定义
一种事物的多种形态,不同的子类调用相同的方法,产生不同的结果
这里采用的一种方法是,通过继承一个比较大的类,完成这个大的类下面不同小类中,相同的方法。比如人可以去喂猫、狗。这些动物都有一个父类是动物,其中动物这个类中有“吃”这个方法,子类通过继承来实现吃这个方法
from animal import Animal
#猫这个类
class Cat(Animal):
def __init__(self,name):
super(Cat,self).__init__(name)
from animal import Animal
# 老鼠这个类
class Mouse(Animal):
def __init__(self,name):
super(Mouse, self).__init__(name)
# 动物类
class Animal(object):
def __init__(self,name):
self.name = name
def eat(self):
print(self.name+"吃")
class Person(object):
# 人这个类
# def feedCat(self,cat):
# print("给你食物")
# cat.eat()
#
# def feedMouse(self, mouse):
# print("给你食物")
# mouse.eat()
def feedAnimal(self,ani):
print("给你食物")
ani.eat()
from cat import Cat
from mouse import Mouse
from person import Person
# 实现类
tom = Cat("Tom")
jerry = Mouse("Jerry")
tom.eat()
jerry.eat()
per = Person()
per.feedAnimal(tom)
per.feedAnimal(jerry)
对象属性与类属性
class Person(object):
# 这里的属性是类属性,是通过类名来调用的
name = "person"
def __init__(self,name):
# 对象属性
self.name = name
print(Person.name)
per = Person("bai")
#对象属性的优先级高于类属性
print(per.name)
#动态的给对象添加对象属性
per.age = 18 # 这种增加只是在这个对象中添加这个属性,而在init中添加则是对每一个对象都添加了这个属性
print(Person.name)
# 删除掉对象中的属性,在调用时会使用到同名的类属性
del per.name
print(per.name) # 打印出类属性的值
注意:不要将对象属性与类属性重名,因为对象属性会屏蔽掉类属性。但当删除对象属性后,在使用又能使用类属性了。