Python 面向对象及类属性,方法,结构

本文深入探讨Python的面向对象编程,包括面向对象与面向过程的区别、封装的概念、类的设计原则、初始化方法、继承(单继承与多继承)、重写父类方法、多态的应用、私有属性和方法、类属性和类方法以及静态方法。通过实例解析了面向对象在实际编程中的应用。
摘要由CSDN通过智能技术生成

面向对象:

面向对象和面向过程的区别:

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

面向过程最大的问题(也许是唯一先天的缺陷)在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃
面向对象的提出正是试图解决这一软件危机

面向对象三大特性:

1.封装:根据职责将属性和方法封装到一个抽象的类中定义类的准则
2.继承:实现代码的重用,相同的代码不需要重复的编写设计类的技巧
子类针对自己特有的需求,编写特定的代码
3.多态:
不同的子类(这是之前提到的继承的知识)
对象调用相同的方法,产生不同的执行结果

类的设计:

在程序中,要设计一个类,通常需要满足以下三个需求:
1.类名 这类事物的名字,满足大驼峰命名法
2.属性 这类事物具有什么样的特征
3.方法 这类事物具有什么样的行为

面向对象的基础语法:
定义简单的类:
定义只包含方法的类:
class 类名:
    def 方法1(self,参数列表):
        pass
    def 方法2(self,参数列表):
        pass

当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量 = 类名( )

需求:
小猫爱吃鱼,小猫爱喝水

class Cat():
    # 哪一个对象调用的方法,self就是哪一个对象的引用
    def eat(self):
        print '%s like eating fish' % self.name
    def drink(self):
        print '小猫爱喝水'

# 创建猫对象
dudu = Cat()
dudu.name = 'dudu'   #给猫一个名字
dudu.eat()
dudu.drink()
print dudu
addr = id(dudu)
# %x:打印格式为十六进制的内存地址
print '%x' % addr
# %x:打印格式为十进制的内存地址
print '%d' % addr

# 再创建一个猫对象(内存地址与dudu的不同)
lazy_cat = Cat()
lazy_cat.name = 'bobo'
lazy_cat.eat()
lazy_cat.drink()
print lazy_cat


lazy_cat2 = lazy_cat
print lazy_cat2  #内存地址与lazy_cat相同

这里写图片描述

初始化方法:

我们现在已经知道了使用 类名() 就可以创建一个对象
当使用类名()创建对象时,python的解释器就会自动执行以下操作:
    1.为对象在内存中分配空间--创建对象
    2.调用初始化方法为对象的属性设置初始值--初始化方法(__init__)
这个初始化方法就是__init__方法,__init__时对象的内置方法
__init__方法是专门用来定义一个类具有那些属性的方法
class Cat():
     def __init__(self):
         print '这是一个初始化方法'
        # self.属性名 = 属性的初始值
         self.name = 'dudu'

# 使用 类名() 创建对象的时候,会自动调用初始化方法_init_
dudu = Cat()
print dudu.name


class Cat():
    def __init__(self,new_name):
        self.name = new_name
        # 在类中,任何方法都可以使用self.name
    def eat(self):
        print '%s like eating fish' % self.name

dudu  = Cat('dudu')
print dudu.name
dudu.eat()

lazy_cat = Cat ('lazy_cat')
lazy_cat.eat()

这里写图片描述


封装:

1.封装是面向对象编程的一大特点
2.面向对象编程的第一步 将属性和方法封装到一个抽象的类中
3.外界使用类创建对象,然后让对象调用方法
4.对象方法的细节都被封装在类的内部

需求:
1.xx爱跑步
2.xx体重50公斤
3.xx每次跑步会减肥0.5公斤
4.xx每次吃东西体重会增加1公斤

class Person():
    def __init__(self,new_name,weight):
        self.name = new_name
        self.weight = weight
    def __str__(self):
        return '我的名字叫%s 体重是%.2f' % (self.name,self.weight)
    def run(self):
        print '%s 爱跑步' % self.name
        self.weight -= 0.5
    def eat(self):
        print '%s 吃东西' % self.name
        self.weight += 1

name = Person('dmf',52.0)
#name.run()
name.eat()
print name

这里写图片描述

需求:(多人)
1.xx和xxx都爱跑步
2.xxx体重45公斤
3.xx体重50公斤
4.xx每次跑步会减肥0.5公斤
5.xx每次吃东西体重会增加1公斤

class Person():
    def __init__(self,new_name,weight):
        self.name = new_name
        self.weight = weight
    def __str__(self):
        return '我的名字叫%s 体重是%.2f' % (self.name,self.weight)
    def run(self):
        print '%s 爱跑步' % self.name
        self.weight -= 0.5
    def eat(self):
        print '%s 吃东西' % self.name
        self.weight += 1

name = Person('dmf',52.0)
#name.run()
name.eat()
print name

name = Person('amy',60.0)
#name.run()
name.eat()
print name

这里写图片描述

需求:
1.房子有户型,总面积和家具名称列表
新房子没有任何家具
2.家具有名字和占地面积,其中
床:占4平米
衣柜:占2平米
餐桌:占2平米
3.将以上三件家具添加到房子中
4.打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表

class Furniture():
    # 初始化方法
    def __init__(self,name,area):
        self.name = name
        self.area = area
    def __str__(self):
        return '[%s] 占地%.2f' %(self.name,self.area)

class House():
        def __init__(self,house_type,area):
            self.house_type = house_type
            self.area = area
            #剩余面积
            self.free_area = area
            #家具名称列表
            self.item_list = []
        def __str__
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值