python的面向对象

一、什么是面向对象?

面向对象是一个更大的封装,关注的是做事情的人是谁,而面向过程关注的是怎么做。

二、什么是类和对象?

1.类

类即一类事物的总称,是抽象的。比如鸟类,猫科动物,这些统称为类。

如何定义类?

        使用class来定义,类名遵循大驼峰命名规范,如:class Dog(object):

2.对象

对象是从类中创建出来,具体存在的。比如布谷鸟,啄木鸟就是一个具体的对象。

如何创建一个对象?

    将类名赋给一个变量,如:wangcai = Dog()

三、面向对象的三大特征

1.封装

将属性和方法进行封装,需要使用的时候通过对象来调用

将类的属性封装(隐藏)起来,提供公开的方法来访问,使用双下划线__来隐藏属性

封装的三种写法

<1> get 和 set

class People(object):
    def __init__(self, name):
        self.__name = name
 
    def get_name(self):
        return self.__name

    def set_name(self,name):
	self.__name = name
·······························			
bob =  People("bob",12)
print(bob.get_name())  // 通过get_name查看
bob.set_name("tom")    // 设置名字
print(bob.get_name())

<2>property函数

在<1>中定义函数的末尾添加

    name = property(get_name,set_name)		
..................................
bob =  People("bob",12)
print(bob.name)        // 打印bob的名字
bob.name = 'baibai'    // 修改bob的名字,注意使用的是name,不再是set_name
print(bob.name)

<3>装饰器

访问和<2>一样

class People(object):
    def __init__(self, name):
        self.__name = name	

    @property
    def name(self):
	return self.__name
				
    @name.setter
    def name(self,name):
        self.__name = name

2.继承

类与类之间存在一种继承的关系,通俗讲子承父业

例:在如下中,父类含有公开的test方法,子类可以继承,调用父类方法,查看结果

class Father(object):
    def __init__(self):
        self.name = "bob"

    def test(self):
        print("-----test-----")

class Son(Father):
    pass


haha = Son()     // 创建子类对象
haha.test()      // 调用父类方法

 

注:只能继承公开的方法和属性,除了私有属性和方法,都能被继承

方法重写/覆盖(override)

若父类的方法不能满足子类使用的时候,就可重写此方法。注:覆盖时,方法名称和参数必须一模一样

在上例中,我们去修改父类的test方法,查看结果调用情况

class Father(object):
    def __init__(self):
        self.name = "bob"

    def test(self):
        print("-----father-----")


class Son(Father):
    def test(self):
        print("-----son-----")


haha = Son()
haha.test()

调用原则:就近调用 ,子类拥有该方法,则会调用自己的

super关键字

如果子类重写父类的方法后,又想调用父类的方法,则可以使用super关键字

在上例子类中的方法下添加,调用结果即为父类的test方法

class Son(Father):
    def test(self):
        super().test()

多继承

可以一个子类拥有多个父类

class Father(object):
    def __init__(self):
        self.name = "bob"

    def test(self):
        print("-----father-----")


class A(Father):
    def test(self):
        print("-----A-----")


class B(Father):
    def test(self):
        print("-----B-----")


class C(A,B):
    pass


cc = C()
cc.test()       // 会调用父类A的方法
print(C.__mro__)    // 通过此代码可以查出方法调用顺序

3.多态

定义时的类型和运行时的类型不一样即为多态。当引用对象时,才确定究竟是调用哪一个类 

class Dog(object):
    def test(self):
        print("-----把你们经理叫来-----")


class Cat(Dog):
    def test(self):
        print("-----董事长我知道错了-----")


def state(value):
    value.test()

tom = Dog()
jerry = Cat()

state(jerry)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值