Python面向对象学习(一)

定义

使用 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) # 打印出类属性的值


注意:不要将对象属性与类属性重名,因为对象属性会屏蔽掉类属性。但当删除对象属性后,在使用又能使用类属性了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值