面向对象特性

封装特性

封装(Encapsulation)是将类中的某些部分(某些属性和方法)隐藏起来。

对象不能直接使用隐藏起来的属性或者方法,具有保护作用的功能

封装格式:__属性或者方法名称。

封装的目的是为了保护隐私。

私有属性

格式:__属性名=值

在类的外部不能使用(对象不能调用私有属性)

class Girl():
    def __init__(self,name,age):
        self.name=name
        self.__age=age
    def show(self):
        print(self.name,self.__age)
zs=Girl('张三',18)
zs.show()
print(zs.name)
print(zs.__age) #AttributeError: 'Girl' object has no attribute '__age'

                # " Girl "对象没有属性" _age "

私有方法:

在方法面前添加__例如__send_message()

私有方法的作用:就是在开发的过程中保护核心代码。

在类的外部不能使用(对象不能调用私有方法)

class Phone():
    def _phone(self):
        print('正在拨打电话')
    def phone(self,m):
        if m >=30:
            self._phone()
        else:
            print('请先给你的手机交满30话费,再来打电话')
x=Phone()
x.phone(12)    #请先给你的手机交满30话费,再来打电话

x.phone(33)    #正在拨打电话

私有化封装后的限制:

类中                         可以访问

类外/对象外             不可以访问

子类/子类对象         不可以访问

1.可以使用__dict__可以查看属性(包括私有属性)的值

在类的内部使用私有属性,python内部会自动转换成_类__属性名。

在类的外部不能给对象添加私有属性因为不能转换成_类名__属性名类型。

class A():
    def __init__(self,age):
        self.__age=19
    def setAge(self,age):
        self.__age=age
    def __str__(self):
        return str(self.__age)
a=A(1)
a.__age=100
print(a.__dict__)
print(a._A__age)
a._A__age=99
print(a.__dict__)

继承:

继承就是让类和类之间产生父子关系,子类可以拥有父类的静态属性和方法。

父类:用于被继承的类,称之为父类,也叫基类,或者叫超类。

子类:继承其他类的类,称之为子类,也叫派生类。

class Animal():
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
    def jiao(self):
        print('叫')
    def eat(self):
        print('吃')
    def __str__(self):
        return '品种:%s %d岁 性别:%s'%(self.name,self.age,self.sex)
class Cat(Animal):
    def climb(self):
        print('爬树')
class Dog(Animal):
    def swimming(self):
        print('游泳')


d=Dog('藏獒',3,'公') 
print(d)            #品种:藏獒 3岁 性别:公
c=Cat('波斯',2,'母')
print(c)            #品种:波斯 2岁 性别:母
c.climb()           #爬树
d.swimming()        #游泳

#查看继承的父类
#格式:类名.__bases__
#(1)python3中如果一个类没有继承任何类,默认继承object类。管这种类叫新式类。
#(2)object类,是python中的祖宗,所有的类都是从object类中继承下来的。
print(Cat.__bases__)      #(<class '__main__.Animal'>,)
print(Animal.__bases__)   #(<class 'object'>,)

方法的覆写:

子类中定义了和父类中相同的方法,我们叫做方法的复写(派生方法)。实例对象调用此方法的时候就会调用自己类中的方法了。

class A():
    def hehe(self):
        print('A:笑')
class B(A):
    def hehe(self):
        print('B:哈哈')
class C(A):
    def hehe(self):
        print('C:呵呵')
a=A()
b=B()
c=C()
a.hehe()  #A:笑
b.hehe()  #B:哈哈
c.hehe()  #C:呵呵

super( )

子类和父类有相同的方法,如果子类想调用父类相同的方法。可以使用super()方法。

super默认省略了两个参数,第一个是类名,第二个是self。两个参数可以省略不传递例如super(Student,self)

格式:

父类名称.方法名称(self)

super( ).方法名称()

class Animal():
    def __init__(self,name,age):#重载、重写、复写、覆盖
        self.name=name
        self.age=age
class Cat(Animal):
    def __init__(self,name,age,speed):
        self.speed = speed
        # 重写父类的方法一
        super().__init__(name,age)
        # 重写父类的方法二
        #Animal.__init__(self,name,age)
    def jiao (self,):
        print('喵喵')
    def __str__(self):
        return '猫:%s,,%d岁,速度%d'%(self.name,self.age,self.speed)
class Dog(Animal):
    def __init__(self,name,age, height):
        self.height = height
        super().__init__(name, age)
    def jiao(self):
        print('汪汪')
    def __str__(self):
        return '狗:%s,,%d岁,身高%d'%(self.name,self.age,self.height)
c=Cat('波斯',3,120)
print(c)            #猫:波斯,,3岁,速度120
d=Dog('京巴',5,180)
print(d)            #狗:京巴,,5岁,身高180
c.jiao()         #喵喵
d.jiao()         #汪汪

多继承

一个子类可以继承多个父类,就是多继承。并且拥有所有父类的属性和方法。

语法:

class 子类名(父类名1,父类名2...): pass

class A():
    def func(self):
        print('A开始')
        print('A结束')
class B(A):
    def func(self):
        print('B开始')
        super().func()
        print('B结束')
class C(A):
    def func(self):
        print('c开始')
        super().func()
        print('c结束')
class D(B,C):
    def func(self):
        print('D开始')
        super().func()
        print('D结束')
d=D()
d.func()

多态

声明形参的时候是父类对象,实际运行的时候是子类对象

class Dog():
    def jiao(self):
        print('汪汪')
class Cat():
    def jiao(self):
        print('喵喵')
class Pig():
    def jiao(self):
        print('哼哼')

def honghong(a):
    a.jiao()
d=Dog()
c=Cat()
p=Dog()
honghong(d)
honghong(c)
honghong(p)
class Ali():
    def pay(self,money):
        print('阿里支付',money)
class Weixin():
    def pay(self,money):
        print('微信支付',money)
class Person():
    def consume(self,pay,money):
        pay.pay(money)
ali=Ali()
weixin=Weixin()
zs=Person()
zs.consume(ali,100)
zs.consume(weixin,200)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值