Python基本语法10

面向对象程序设计

面向过程和面向对象

面向过程

分析出问题的解决步骤,解决程序代码一一实现的过程

程序=数据结构+算法

面向对象

分析出问题中存在的对象,用代码定义对象的属性和行为,从而实现编程目的

程序=对象+行为

类和对象

定义:类是一个抽象的概念,它是具有相同属性和行为的对象的统称。

类创建格式

class类名(父类名):

#类属性

属性名=属性值

#初始化方法

def_ _ init_ _(self.形参列表):

#实例属性

delf.实例属性名=形参

#构造方法

def _ _new__(cls,形参列表):

cls.类属性 = 形参

return 父类.__new__(cls)

#字符串方法

def__str__(self):

return "字符串"

#析构方法

def__del__(self):

print("字符串")

#实例方法

del 方法名 (self,形参列表):

方法体

#类方法

@classmethod

def 方法名(cls,形参列表):

方法体

#静态方法

@starticmethod

def 方法名(形参列表):

方法体

对象

定义:客观存在的事务,由事物特征和功能组成

创建对象格式

对象名=类名(实参列表)

对象调用类的属性和方法

调用属性:对象名.属性

调用方法:对象名。方法名(实参列表)

特殊的父类方法

初始化方法__init__(self)

初始化实例属性,在类对象的创建中会自动调用,当不起重写父类的初始化方法时,系统会自动调用无参的初始化方法

构造方法__new__(cls)

重新构造类实例,通常它用于创造不可变类

1.默认参数为cls,指向类实例

2.构造方法中必须使用return返回父类的构造方法

3.构造方法中的形参必须与初始化方法中的形参一致

4.当对象创建时,先执行构造函数,然后执行初始化方法

字符串方法__str__(self)

当使用print()打印对象名时,可以重写该方法实现不同的输出内容

析构方法__del__(self)

用于删除对象从而释放该类在内存中的空间,在对象定义之后可通过‘del 对象名’的方式删除该对象,同时自动调用该方法

类体中方法总类

实例方法

定义

def 实例方法名(self,形参列表):

方法体

方法体中可以通过self。实例属性名来调用实例属性,也可以通过类名.类属性调用类属性

调用

使用对象名调用该方法

类方法

定义格式

@classmethod

def 类方法名(cls,形参列表):

方法体

方法体中只能通过cls.类属性名来调用,不能调用实例属性

调用

使用对象名和类名调用该方法

静态方法

定义格式

@starticmethod

def 静态方法名(形参列表):

方法体

方法体中既不能调用类属性也不能调用实例属性

调用

使用对象名和类名调用该方法

特征

封装

定义

将类体中的属性、行为、或行为的细节隐藏起来的过程

步骤

1.将封装的属性或行为私有化

2.生成get和set方法便于外部程序的调用

特殊变量

全局变量

由大写字母组成,可以由本类及子类和外部程序调用

保护变量

由_小写字母,可以由本类及子类访问

私有变量

由_ _小写字母,只能由本类访问,不能由子类访问

系统变量

由_ _ 小写字母_ _ 组成,由系统定义的属性

继承

定义

为了实现代码的拓展功能,可以在类的基础上定义它的子类,作为子类可以继承父类的公有属性和方法,也可以定义子类的属性和方法

分类

单继承

class 子类名(父类名):

#初始化方法

def __init__(self,父类的形参,子类的形参):

super() __init__(父类的形参)

多继承

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

#初始化方法

def__init__(self,父类1形参,父类2形参,子类的形参):

父类1.__init__(self,父类的形参)

父类2.__init__(self,父类的形参)

说明

1.子类可以继承父类的初始化方法,公有属性和公有方法,不能继承私有属性和私有方法,子类可以定义自己的属性和方法

2.子类继承父类的属性和方法,也可以重写父类的方法

多态

定义

当子类使用不同实例调用相同方法时,程序执行的结果相同。

示例

# 类的多态

# 不同的子类对象,当调用相同的父类方法时产生不同的执行效果

class Animal (object):

    def __init__(self,name,food):

        self.name = name

        self.food = food

    def eat(self):

        print("饲养员给%s喂%s。"%(self.name,self.food))

class Monkey(Animal):

    def __init__(self,name,food):

        super().__init__(name,food)

class Horse(Animal):

    def __init__(self,name,food):

        super().__init__(name,food)

class Rabbit(Animal):

    def __init__(self,name,food):

        super().__init__(name,food)

# 饲养员类

class Breeder(object):

    def feedAnimal(self,n):    # n表示的是不同动物对象

        n.eat()

# 创建对象

bd = Breeder()

hz = Monkey("猴子","香蕉")

ma = Horse("马","甘草")

tz = Rabbit("兔子","萝卜")

bd.feedAnimal(hz)

bd.feedAnimal(ma)

bd.feedAnimal(tz)

# 饲养员类

class Breeder(object):

    def feedAnimal(self,n):    # n表示的是不同动物对象

        n.eat()

说明:多态的体现,当n传入不同的对象名时,n调用相同方法eat()产生的程序结果不同

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容