python面向对象编程指南 豆瓣_python面向对象编程进阶

一、面向对象编程三大特征

Python是面向对象的语言,同样支持面向对象的编程的三大特征:继承,封装,多态。

封装是指隐藏对象的属性和实现细节,只对外提供必要的一些方法,私有属性,私有方法是实现封装地 一些方法。

继承是实现代码重用的方法,可以极大避免代码的重用,同时还可以在继承的基础上进行重构。

多态可以按字面意思理解为“多种状态”,在编程中是指一个方法调用但是由于对象不同而产生的不同结果。

三、继承

语法格式

Class 子类类名(父类)

类体

如果在类定义中没有指定父类,则默认父类是object 类。也就是说,object 是所有类的父

类。

如果定义子类时,有多个父类,也叫多继承。

class Student:

# 定义基本属性

n = 'Bob'

a = 0

# 定义私有属性,私有属性在类外部无法直接进行访问

__w = 0

# 定义构造方法

def __init__(self, n, a, w):

self.n = n

self.a = a

self.__w = w

def know(self):

#类内部可以直接调用

print('my weight is: ',Student.__w )

print("%s say: I’m %d years old。" % (self.n, self.a))

#继承于父类Student, People也叫做子类

class People(Student):

t = ''

def __init__(self, n, a, w, t):

self.t = t

#定义父类的构造函数

Student.__init__(self, n, a, w)

def know(self):

print("%s say: I’m %d years old and %d cm。" % (self.n, self.a, self.t))

my = People('王二', 18 , 55,175)

my.know() #调用定义方法

运行结果:

王二 say: I’m 18 years old and 175 cm。

上面的例子中包含了成员继承和方法重写,成员继承是指子类继承了父类除构造方法之外的所有成员。方法重写是指子类重新定义父类中的方法,这样就会覆盖父类的方法。

多重继承

ython 支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,python从左至右搜索。

class Aa:

def ab(self):

print(1234567)

class Bb:

def ab(self):

print(7654321)

class Cc(Bb, Aa):

def cc(self):

print('嗯哼')

class Dd(Aa, Bb):

def dd(self):

print('嗯哼')

c = Cc()

c.ab()

d = Dd()

d.ab()

输出结果:

7654321

1234567

从结果我们可以知道执行了Bb类中的方法,因为父类中方法相同且没有指定父类,从左到右,会先去执行最左面类中的方法。

三、多态

1. 多态是方法的多态,属性没有多态。

2. 多态的存在有2 个必要条件:继承、方法重写。

class Name:

def say(self):

print(" I will introduce myself")

class Mary(Name):

def say(self):

print("I'm Mary")

class Bob(Name):

def say(self):

print("My name is Bob")

def say_name(a):

if isinstance(a,Name):

a.say() #传入的对象不同,shout方法对应的实际行为也不同。

say_name(Mary())

say_name(Bob())

输出结果:

I'm Mary

My name is Bob

这里用到了isinstance函数,简单介绍一下。Isinstance属于python的内置函数,它是用来判断一个对象是否是一个已知的类型。

isinstance(object, classinfo)

object -- 实例对象。

classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。

在isinstance(a,Name)中,a代表实例对象。Name表示类名。

四、运算符重载

让自定义的类生成的对象(实例)能够使用运算符进行操作

格式:

def __xx__(self,other):

语句块

class S:

def __init__(self, a, b):

self.a = a

self.b = b

def __str__(self):

return 'S(%d, %d)' % (self.a, self.b)

def __add__(self, other):

return S(self.a + other.a, self.b + other.b)

a = S(1, 3)

b = S(1, -4)

print(a + b)

输出结果:

V(2, -1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值