精心总结的python面向对象

一、面向对象的基本概念

  • 类:描述具有相同属性和方法的对象集合。它定义了该集合中每个对象所共有的属性和方法。对象是类实例。
  • 类变量:类变量是整个实例化的对象中是公共的。类变量是定义在类中,且在函数体外的。类变量不做实例变量使用。
  • 局部变量:定义在方法中的变量,只能被类的当前实例使用。
  • 数据成员:类变量或者实例变量,用于处理类或实例对象的相关数据。
  • 方法重写:子类继承的父类的方法,如果不能满足子类的需求则需要进行方法的重写,覆盖父类的方法,这个过程叫override
  • 继承:一个派生类继承基类的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
  • 实例化:创建一个类的实例,类的具体对象。
  • 方法:类中创建的函数。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

二、Python的私有方法、私有属性的理解

  • _xxx :保护变量,只有类的实例和子类实例才可以访问这些变量,需要类提供的接口才可方位
  • __xxx :类中的私有变量/私有方法,意思是:只有类对象自己才能进行访问,连子类的对象也不能访问。
class Dog:
    # 私有方法,只有类对象自己才可进行方位
    def __sit_down(self):
        print('坐下了')
        
    def sit_down(self,host_name):
        if host_name == '主人':
            self.__sit_down()  # 只能在这里使用


if __name__ == '__main__':
    w = Dog()
    w.sit_down('主人')
    w.__sit_down()   # 这里调用会报错
  • __xxx()__:表示Python类中的特殊方法标识,其中内置方法表示一个类被创建之后,其自然就包含这些方法。查看方法:
'_Dog__sit_down', 
'__class__',
'__delattr__',
'__dict__', 
'__dir__', 
'__doc__', 
'__eq__', 
'__format__', 
'__ge__', 
'__getattribute__', 
'__gt__', 
'__hash__', 
'__init__', 
'__init_subclass__', 
'__le__', '__lt__', 
'__module__', 
'__ne__', 
'__new__', 
'__reduce__', 
'__reduce_ex__', 
'__repr__', 
'__setattr__', 
'__sizeof__', 
'__str__', 
'__subclasshook__', 
'__weakref__', 
'sit_down'

归纳总结如下:

  • 类的私有属性,不能通过类的实例直接访问,但是可以类的方法访问;
  • 类的私有方法,不能通过对象直接访问,但是能通过类的方法方位;
  • 类的私有属性、私有方法,不会被子类继承,也不能被访问;
  • 一般情况下,私有的属性、方法都是不对外公布的,往往用来做内部的事情,起到安全的作用;
  • 可以通过调用继承的父类的共有方法,间接的访问父类的私有方法、属性;

三、类的继承

1.类的简单继承:直接继承父类所有方法和属性,不做任何改动。

class Animal:    
    def __init__(self,name,sex,type):
        self.name = name
        self.sex = sex
        self.type = type
    
    def eat(self):
        print("{} eat".format(self.name))

    def run(self):
        print("{} run".format(self.name))

class Cat(Animal):
    pass

if __name__ == '__main__':
    tom = Cat('tom','1','猫')
    tom.run()
    tom.eat()

2.类继承中的重写:重写是对父类中的某些方法进行重新编写,因为有些继承过来的方法,功能不能满足要求。

class Cat(Animal):
    def eat(self):
        print('{} eat fish'.format(self.name))

3.类继承中的拓展:子类除了从父类中继承得到的方法之外,一定还有自己的特有属性和方法,因此要对子类进行拓展,增加新的属性和方法。

class Cat(Animal):
    def eat(self):
        print('{} eat fish'.format(self.name))

    # 子类方法的拓展
    def method(self):
        print('{} can catch mouse'.format(self.name))

小结:通过类的重写和拓展,有如下操作:

  • 对父类方法进行重写之后,子类调用的是子类重写的方法;
  • 子类可以直接调用父类中的属性值;
  • 子类可以对父类进行一些拓展,丰富自己的方法数量;
  • 子类中的方法可以调用父类中的方法和属性,直接通过子类的实例进行调用即可。在子类中,通过self可调用,在类外可通过子类的实例进行调用。
  • 父类不能调用子类的方法和属性;

4.类的多重继承

class A:
    def add(self,a,b):
        self.a = a
        self.b = b
        print('类A中的加法:',self.a + self.b)

class B:
    def add(self,a,b):
        self.a = a
        self.b = b
        print('类B中的加法:',self.a + self.b)

    def add(self,a,b):
        self.a = a
        self.b = b
        print('类B中的减法:',self.a - self.b)

class C(A,B):
    pass 

class D(B,A):
    pass

当类存在多继承时,一般是按照深度优先进行遍历的。

5.类的超继承:即要拥有父类的特征,又要有子类的新特征。

class Animal:
    def __init__(self,name,sex,type):
        self.name = name
        self.sex = sex
        self.type = type

    def eat(self):
        print("{} eat".format(self.name))

    def run(self):
        print("{} run".format(self.name))

# 子类中进行超继承
class Dog(Animal):
    def __init__(self):
        super(Dog, self).__init__('jerry','dog','中华田园犬') # 超继承
        print('this is a dog')

    def suck(self,food):
        super(Dog,self).eat()    # 超继承
        print('{} eat {}'.format(self.name,food))

if __name__ == '__main__':
    dog_a = Dog()
    dog_a.suck('XXX')

super类是子类的类名,顺着子类的类名找到对应的父类,并调用父类的方法,实现超继承。

<完>

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值