python3——面向对象

1.面向对象的常用概念

pyhton也是一门面向对象的语言,体现了其封装性,将要做的事情封装到对象里,用对象去完成,而不是每一个步骤都要我们去细分,可以先了解一下面向对象里面的常用概念:

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法:类中定义的函数。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 局部变量:定义在方法中的变量,只作用于当前实例的类。
  • 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。(python是可以多继承的)
  • 实例化:创建一个类的实例,类的具体对象。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

2.类的定义

这是一个简单的类

3.对象的创建及其方法与属性的调用

创建对象的格式:   变量=classname( )   (如果有__init__()方法,方法里面有属性参数,那么在创建对象的时候括号里面就要加入参数)

示例:

4.添加对象的属性

除了上述在创建类的时候直接将属性作为类变量以外,我们还可以用下面的方法添加对象的属性

创建多个对象

5.对象的init方法和str方法 

def __init__( self,*value)  此构造函数在类进行实例化的时候会自动进行调用

在init方法中加入参数,那么在创建对象的时候也要加入参数 

def __str__(self)方法相当于java里面的tostring方法,有返回值,一般如果我们想直接打印对象就能看到其属性值,就会写上__str__()方法

没有str方法,打印对象就是其地址值

加上str方法后:

6.不同类间的相互影响 (示例)

class Home:
    def __init__(self, new_area, new_info, new_addr):
        self.area = new_area    #面积
        self.info = new_info    #户型
        self.addr = new_addr    #地址
        self.left_area = new_area    #可用面积
        self.contain_items = []      #家具
    def __str__(self):
        msg = "房子的总面积是:%d,可用面积是:%d,户型是:%s,地址是:%s"%(self.area, self.left_area, self.info, self.addr)
        msg += " 当前房子里的物品有%s"%(str(self.contain_items))
        return msg
    def add_item(self, item):
        self.left_area -= item.area
        self.contain_items.append(item.name)

class furniture:
    def __init__(self, new_name, new_area):
        self.name = new_name
        self.area = new_area
    def __str__(self):
        return "%s占用的面积是:%d"%(self.name, self.area)

house = Home(129, "三室两厅两卫", "武汉市江夏区光谷一路88号")
print(house)
print("第二次置办家具")
bed = furniture("席梦思", 4) #购买了一张床
print(bed)
#房子的可用面积要减小,放家具的集合要添加元素
house.add_item(bed)
print(house)
print("第二次置办家具")
desk = furniture("饭桌",2)
house.add_item(desk)
print(house)

输出的结果:

7.隐藏对象的属性 

这种操作是考虑数据的安全性

隐藏属性的做法 

8.私有属性和私有方法

私有变量:__fieldname

私有方法:def __say(self):

 私有变量的取值和赋值:

 

 私有方法的定义和调用

9.del方法 

 测量一个对象引用的个数

10.继承 

   python里面的继承可以是单继承也可以是多继承,继承就是将都会常用的属性及行为抽取到一个类里面,如果其它类也要用这些属性和行为直接继承该类,这样就会减少代码的书写,节省了开发时间,提高了代码的复用性和简洁性

单继承:class B(A):

多继承: class C(A,B):

示例演示:

class Anmail:
    def eat(self):
        print(".........吃..........")
    def drink(self):
        print(".........喝..........")
    def sleep(self):
        print(".........睡..........")

class Cat(Anmail):#单继承
    def catch(self):
        print(".........抓老鼠..........")
class People:
    def say(self):
        print(".........说话..........")

class Lanmao(Cat,People):#多继承
    def catch(self): #与父类的方法相同,叫方法的覆盖或者是重写
        print(".........机器猫不敢抓老鼠..........")

lanmao =Lanmao()  #创建对象
lanmao.eat()  # 父类的父类的方法
lanmao.say()  #其中一个父类的方法
lanmao.catch() #父类和自己都有

输出的结果如下: 

子类会继承它所有祖先类的方法

访问被重写的方法 

(1)父类名.被重写方法名(self) 括号里面必须加上self

  (2)super().被重写方法名()  super后面的括号不要忘了  

11.私有变量和私有方法在继承中的特性

  子类无法直接访问子类的私有变量和私有方法

访问父类中的私有变量和方法的可能方式

12.多态 

多态:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

作用:

(1)增加了程序的灵活性
  以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如eat(item)
(2)增加了程序额可扩展性
  通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用eat(item)去调用

示例:

13.类属性和实例属性

类属性:属于类对象,被实例对象对象共享

实例属性:和某个实例有关系,实例与实例之间不共享,

14.实例方法、静态方法、类方法

类方法:在方法上面加上@classmethod注解

静态方法: 在方法上面加上@staticmethod注解

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值