美文网首页
python学习笔记-(4)面向对象

python学习笔记-(4)面向对象

作者: MR_詹 | 来源:发表于2020-09-06 16:00 被阅读0次

类定义格式

class类名:
    代码

例子
class Washer():
  /// 对象方法
  def wash(self):
    print('洗衣服功能')

haier = Washer()

haier.wash()

添加和获取对象属性

  • 类外面添加对象属性
格式
对象命.属性名 = 值
  • 类外面获取对象属性
对象命.属性名
  • 类里面获取对象属性
格式
self.属性

例子
class Washer():
  def wash(self):  
    /// 类里面获取对象属性
    print(f'洗衣机高度{self.height}')
    print('洗衣服功能')

haier = Washer()

haier.height = 100

魔法方法

在Python中,__xx__()的函数叫做`魔法方法`,指的是具有特殊功能的函数
  • __init__()
作用:初始化对象
注意:
  1. __init__()方法,在创建一个对象时默认被调用,不需要手动调用
  2.__init__(self)中self参数,不需要开发者传递,python解释器会自动把当前对象引用传递过去

例子
class Washer():
    def __init__(self):
        #添加实例属性
        self.width = 100
        self.heigth = 200

    def print_info(self):
        print(f'{self.heigth}')


haier = Washer()
haier.print_info()
  • 带参数的__init__()
class Washer():
    def __init__(self,width,height):
        #添加实例属性
        self.width = width
        self.height = height

    def print_info(self):
        print(f'{self.width}')
        print(f'{self.height}')


haier = Washer(200,100)
haier.print_info()
  • __str__
当使用print输出对象的时候,默认打印对象的内存地址,如果类定义了__str__方法,那么就会打印从这个方法中return的数据

例子
class Washer():
    def __init__(self,width,height):
        #添加实例属性
        self.width = width
        self.height = height

    def print_info(self):
        print(f'{self.width}')
        print(f'{self.height}')

    def __str__(self):
        return '海尔冰箱'

/// 也可以使用关键字的方式初始化对象
haier = Washer(width=1000,height=200)

print(haier)
  • __del__()
当删除对象时,python解释器也会默认调用__del__()方法

例子
class Washer():
    def __del__(self):
        print('对象被删除了')

haier = Washer()
del  haier

综合实例1:烤地瓜

class SweetPotato():
    def __init__(self):
        # 烤的时间
        self.cook_time = 0
        # 烤的状态
        self.cook_state = '生的'
        # 添加的调料
        self.condiments = []

    def cook(self,time):
        """烤地瓜"""
        self.cook_time += time;
        if 0 < self.cook_time < 3:
            self.cook_state = '生的'
        elif 3 <= self.cook_time < 5:
            self.cook_state = '半生不熟'
        elif 5 <= self.cook_time < 8:
            self.cook_state = '熟了'
        elif self.cook_time >= 8:
            self.cook_state = '烤糊了'

    def add_condiments(self,condiment):
        """添加调料"""
        self.condiments.append(condiment)

    def __str__(self):
        return f'这个地瓜烤了{self.cook_time}分钟,现在是{self.cook_state},添加了以下的调料:{self.condiments}'


digua1 = SweetPotato()
print(digua1)
digua1.cook(2)
print(digua1)
digua1.add_condiments('花椒粉')
digua1.add_condiments('辣椒')
print(digua1)

综合案例2:搬家

家具类
class Furniture():
    def __init__(self, name, area):
        # 家具名称
        self.name = name
        # 家具占地面积
        self.area = area

    def __str__(self):
        return f'家具:{self.name} 占地:{self.area}'


# 房子
class Home():
    def __init__(self, address, area):
        # 地址
        self.address = address
        # 房子面积
        self.area = area
        # 剩余面积
        self.free_area = area
        # 家具列表
        self.frunitures = []

    def __str__(self):
        return f'房子的地址:{self.address},面积:{self.area},剩余面积:{self.free_area},家具:{self.frunitures}'

    def add_fruniture(self, item):
        if self.free_area >= item.area:
            self.free_area -= item.area
            self.frunitures.append(item)
        else:
            print('家具太大了,放不下了')


shafa = Furniture(name='沙发', area=16)
chuang = Furniture(name='床', area=8)

jia = Home(address='广州', area=100)
print(jia)
jia.add_fruniture(shafa)
print(jia)
jia.add_fruniture(chuang)
print(jia)

__dict__

类的继承

Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法。

在Python中,所有类默认继承object类,object类是顶类或基类,其他子类叫做派生类

Python是`多继承`:当一个类有多个父类的时候回,默认使用`第一个`父类同名属性和方法

1、子类和父类具有同名属性和方法,默认使用子类的同名属性和方法

2、 子类调用父类的同名方法和属性:
super().函数名   super().属性
/// 使用super()可以自动查找父类。调用顺序遵循__mro__类属性的顺序,比较适合单继承使用

`__mro__`查看类的父类
格式
类.__mro__

定义私有属性和方法

在python中,可以为实例属性和方法设置私有权限,即设置某个实例属性或方法不继承给子类。
设置私有权限的方法:在属性和方法名 前面 加上两个下划线__

获取和修改私有属性值

一般定义函数名`get_xx`用来获取私有属性,定义`set_xx`用来修改私有属性

类属性

* 类属性就是 `类对象` 所拥有的属性,它被该类的`所有实例对象`所共有
* 类属性可以使用 `类对象` 或 `实例对象` 访问

/// 类属性的优点
/// 记录的某项数据,始终保持一致时,则定义类属性
/// 实例属性 要求 每个对象 为其 单独开辟一份内存空间来记录数据,而类属性为全类所共有,仅占用一分内存,更加节省内存空间

class Dog():
    tooth = 10

wangcai = Dog()
xiaohei = Dog()

print(Dog.tooth)
print(wangcai.tooth)
print(xiaohei.tooth)


* 修改类属性
/// 类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了一个实例对象

类方法

* 特点:
需要使用装饰器`@classmethod` 来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以`cls`作为第一个参数

* 使用场景
1.当方法中需要使用类对象(如访问私有类属性等)时,定义类方法
2.类方法一般和类属性配合使用

class Dog(object):
    __tooth = 10

    @classmethod
    def get_tooth(cls):
        return cls.__tooth

wangcai = Dog()
print(wangcai.get_tooth())

静态方法

* 特点:
1、 需要通过 @staticmethod 来进行修饰,静态方法即不需要传递类对象,也不需要传递实例对象(形参没有self/cls)
2、静态方法也能够通过实例对象和类对象去访问

* 使用场景
1、当方法中 即不需要使用实例对象(如实例对象、实例属性),也不需要使用类对象(如类属性,类方法,创建实例等)时,定义静态方法
2、取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗


class Dog(object):
    @staticmethod
    def info_print():
        print('这是一个静态方法')

wangcai = Dog()
wangcai.info_print()
Dog.info_print()

相关文章

  • python面向对象学习笔记-01

    学习笔记 # 0,OOP-Python面向对象 - Python的面向对象 - 面向对象编程 - 基础 -...

  • python学习笔记目录

    Python学习笔记目录(倒序) Python学习-异常 Python学习-面向对象 Python学习-文件系统 ...

  • Python学习-面向对象

    查看所有Python相关学习笔记 面向对象 面向对象知识点汇总: 面向对象静态属性实例属性(self)静态方法(@...

  • python学习笔记-(4)面向对象

    类定义格式 添加和获取对象属性 类外面添加对象属性 类外面获取对象属性 类里面获取对象属性 魔法方法 __init...

  • 第7天,面向对象

    @(python)[笔记] 目录 前言 在python中,一切皆对象面向对象的程序设计的核心就是对象;面向对象的程...

  • Python 学习笔记

    Python 学习笔记 Python 基础语法 Python是一种面向对象解释型计算机编程语言,语法简洁凝练,强制...

  • Python精简入门学习(十四)

    Python精简入门学习之面向对象(oop) -面向对象 -类和对象

  • Python环境搭建

    Day2Python学习笔记+开发环境搭载 Python面向对象特性: 类的定义 类定义class关键字 多重继承...

  • 读书笔记 | Python学习之旅 Day7

    Python学习之旅 读书笔记系列 Day 7 《Python编程从入门到实践》 第9章 类 知识点 面向对象编程...

  • Python学习笔记-Day08

    Python学习笔记 Day_08-面向对象 截止目前,我学习的编程都是面向过程的。从今天开始,我将学习一种全新思...

网友评论

      本文标题:python学习笔记-(4)面向对象

      本文链接:https://www.haomeiwen.com/subject/dgigsktx.html