python基础四天成(4)面向对象

一、面向对象的介绍:
  1.什么是面向对象:是一种解题思路,把世间万物都看待成一个一个的对象,
                              一个问题的解决,需要靠所有的对象完成它们自己的事情,
                              从而达到整件事情的成功
  2.另一种解题思路:【面向过程编程】--->按照问题的递进关系,一步一步解决                                ,直到得到问题真正的答案为止
  3.代表语言:面向对象:Jave / JavaScript  / c++ / Python
                     面向过程:C语言

二、面向对象编程的结构:
  1.类:相当于就是一个工厂,或者可以理解为一个模板。
  2. 对象:就是工厂生产出来的具体的东西,也就是根据模板制造出来的实例。
 【注意:对象不会凭空产生,也就意味着必须先有类,再有对象】
  3.类的构成:
     在类中一般情况下我们需要描述将来对象具备的特征和行为
     这里特征就称为对象的属性、行为就称为对象的方法
三、类的创建和对象(实例)的生成:
  1.类的创建:
     要用到class 关键字
     例如:class 类名(object):
                   #将来对象的属性,要通过_ _init_ _()魔法函数(初始化函数)来进行表示
                   def _ _init_ _(self,n):
                       self.xx =n
                   #将来对象的方法,是通过函数的形式表示,函数中的第一个参数必须是self
   【注意:类中出现的self均代表将来通过该类生成的对象,同时如果属性的值不固定,那么在初始化函数中要给与参数】
  2.对象(实例)的生成:
     对象名 = 类名(参数)  ---->是否有参数,取决于类中初始化函数是否有参数
     例如:
            class A(object):
        def __init__(self,age):   # 初始化函数
                self.name = "张三"     # 对象(实例)的属性,诗是个固定值
                self.age = age        # 对象的属性,通过参数传递
        def draw(self,num):      # 对象的方法,可以接收参数
                print("%s会画%d种画"%(self.name,num))

            a = A(9)     # 根据类生成对象,对象叫做 a 
  3.对象访问属性、调用方法
     对象名.属性名
     对象名.方法名()
     例如:print(a.name)
               a.draw(3)
四、私有属性、实例属性、类属性、私有方法、实例方法、类方法、静态方法
  1.按照属性只能在类中使用和能在类外被调用,分为私有属性和共有属性(实例属性、类属性)
  2.按照属性属于谁,分为实例属性和类属性

  3.按照方法只能在类中使用和能在类外被调用,分为私有方法和共有方法(实例方法、类方法、静态方法)
  4.按照方法属于谁,分为类方法和实例方法、静态方法

  例如:
class People(object):
    height = "1米8"   # 类属性,可以在类外被访问
    __fuse = "yellow"   # 私有类属性,只能在类内部使用
    def __init__(self,n,a):
        self.name = n    # 实例属性,可以在类外被访问
        self.age = a
        self.eyes = "black"
        self.__weight = "50kg"   # 私有实例属性,只能在类内部使用
    def move(self):   # 实例(对象)方法
        print("%s的人类都会走路"%self.__weight)
    @classmethod    # 表示下方是类方法的装饰器
    def waimao(cls):  # 类方法
        print("亚洲人都是%s肤色,希望咱们身高都是%s。"%(cls.__fuse,cls.height))
    @staticmethod  # 表示下方是静态方法的装饰器
    def eat():       # 静态方法
        print("人类都会吃饭")

p = People("张三",18)
# 对象的属性、方法只有对象自己能用、类的属性和方法,对象和类都能用
print(People.height)    # 类访问类属性
print(p.height)         # 对象访问类属性
print(p.name)           # 对象访问实例属性
People.waimao()         # 类访问类方法
People.eat()            # 类访问静态方法
p.waimao()              # 对象访问类方法
p.eat()                 # 对象访问静态方法
p.move()                # 对象访问实例方法

五、继承:
  什么是继承: 继承是面向对象语言具备的特征之一,只要是为了提高代码的复用率。
  1.单继承:一个子类继承一个父类
                  继承的时候,只要在当前类的小括号中写入父类的名字即可,这样就可以继承父类的所有属性和方法了。
    例如:class Parent(object):
         def __init__(self,n):
                 self.name = n
         def eat(self):
                print("我喜欢吃东西")
             class Son(Parent):  # 单继承,Son这个子类只有一个父类Parent
                    pass            # 虽然Son类中没有代码,但是它可以继承父类的name属性和eat()函数

             s = Son("李四")
             print(s.name)   # 子类创建的对象s使用父类的name属性
             s.eat()        # 子类创建的对象s使用父类的eat方法
  2.多继承:一个子类会继承多个父类(子类小括号中的父类顺序也会直接影响继承的结果)
    例如:
    class Master(object):
           def __init__(self):
                    self.kongfu = "古法煎饼果子配方"
            def make_cake(self):
                    print("按照%s制作煎饼果子"%self.kongfu)

    class School(object):
           def __init__(self):
                    self.kongfu = "现代煎饼果子配方"
           def make_cake(self):
                    print("按照%s制作煎饼果子"%self.kongfu)
    class Prentice(School,Master):
             pass
    damao = Prentice()
    print(damao.kongfu)
    damao.make_cake()
  3.在继承的时候如果还想使用和父类同名的函数,可以使用super( )机制
     例如:
         class Master(object):
             def make_cake(self):
                 print("按照古法制作煎饼果子")
         class School(object):
             def make_cake(self):
                  print("按照现代制作煎饼果子")
         class Prentice(School,Master):
             def make_cake(self):
                  super(Prentice,self).make_cake()      # 这里super()函数就可以获取到Prentice的父类School中的make_cake()函数去执行
                  print("这是子类自己的make_cake方法")
        damao = Prentice()
        damao.make_cake()
  4.多层继承:表示子类有多个父类,但是父类有可能还有多个父类。其中父类的父类或者父类的更高级别类统称为“超类”
     在多层继承的时候,要注意继承的顺序,可以通过      子类._ _mro_ _   的方式进行查看。

 好了,这是这一系列的最后一篇了,后会有期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值