首页 > 编程语言 >python学习笔记整理04(面向对象)

python学习笔记整理04(面向对象)

时间:2022-12-16 23:00:16浏览次数:52  
标签:__ name 04 python self 面向对象 方法 def 属性

 1.概念

2.编写步骤

3.魔法方法

4.封装

5.私有和公有

6.继承

7.重写

8.多态

9.属性和方法

 

 

1.概念

 

 2.编写步骤

# 1.创建类
# 用 class 关键字定义类,类名用大驼峰命名法
class Cat:
    # 创建方法,方法本质是函数
    # self 是普通形参,python 解释器在执行代码的时候自动将调用这个方法的对象传递给了self,其本质是对象,只是对象是全局变量,self 是函数中的局部变量
    def eat(self):
        # 添加属性:对象.属性名 = 属性值,获取属性:对象.属性名
        # 类内部添加:self.属性名,一般写在__init__中
        print('小猫{self.name}吃鱼的方法')

# 2.创建对象
# 用 类名() 创建对象,将对象保存到变量中
blue_cat = Cat()

#3.调用方法
# 类外部添加:对象.属性名,一般不用类外部添加
blue_cat = '蓝猫'
blue_cat.eat()

 

 

3.魔法方法

# 魔法方法:形式为 __方法__ ,在满足某个特定条件下会自动调用的方法

class Cat:
    # 1.初始化方法__init__
    # 场景:创建对象后会自动调用
    # 用途:①添加属性,②书写类中每次都会调用的重复代码
    def __init__(self, name, age):
        self.name = name
        self.age = age


    # 2.默认输出方法__str__
    # 场景:print() 打印对象时会自动调用
    # 用途:书写对象的属性信息,若未定义,默认输出对象的引用地址
    # 注意:必须返回一个字符串
    def __str__(self):
        return f'小猫名字是{self.name},年龄是{self.age}岁'


    # 3.析构方法__del__
    # 场景:程序代码运行结束,所有对象都被销毁
    def __del__(self):
        print(f'{self.name}的代码结束了')

blue_cat = Cat('蓝猫', 2)  # 创建对象时传参,与__init__定义的参数要一致
print(blue_cat)  # 打印对象输出__str__返回字符串

# 可在结束前使用 del 对象 来删除对象,但若对象有多个名字(即多个对象引用同一个对象),需要把所有对象名删除才可以真的删除这个对象
# 代码执行结束后会打印__del__结果内容

 

4.封装:定义类的过程称为封装,即将属性和方法封装到一个抽象的类中

5.私有和公有:在 python 中定义的方法和属性,可以添加访问控制权限,分为私有权限和公有权限

class Person:
    def __init__(self, name, age, weight):
        # 公有权限的写法:直接书写
        # 公有的方法和属性可以在任意地方访问和使用
        self.name = name
        self.age = age        
        # 私有权限的写法:在方法或属性名前加 __
        # 私有的方法和属性只能在类内部使用
        self.__weight = weight
    
    
    def __str__(self):
        return f'{self.name}今年{self.age}岁了,现在体重是{self.__weight}公斤'


xm = Person('小明', 18, 50)
xm.age = 19  # 公有属性可修改
xm.weight = 40 # 私有属性不可修改
print(xm)  # 执行结果:小明今年19岁了,现在体重是50公斤


# 补充:对象.__dict__ 魔法属性,可以将对象具有的属性组成字典返回
print(xm.__dict__)  # {'name': '小明', 'age': 19, '_Person__weight': 50, 'weight': 40}    

 

 6.继承

# 书写父类(基类)
# 最原始的父类是 object,一般可省略书写
class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print(f'{self.name}吃东西')


# 书写子类(派生类)
# 子类继承父类的语法:class 子类(父类):
class Dog(Animal):
    def bark(self):
        print(f'{self.name}要狗叫')

# 单继承:一个类只能继承一个父类
class XTQ(Dog):
    pass


# 继承特点:子类继承父类后,子类的对象可以直接使用父类的属性和方法
xm = XTQ('哮天犬')
# 继承的调用方法模式:先在当前类中查找,若有直接调用,若没有去父类中查找...直到在object中仍没有查找方法,代码报错
xm.eat()
xm.bark()

 

7.重写

# 重写:在子类中定义与父类名字相同的方法
# 父类方法无法满足子类需求时可以重写,重写后子类对象直接调用子类方法

class Dog:
    def bark(self):
        print('汪汪汪叫')


class Xtq(Dog):
    # 覆盖:在子类中直接书写新的代码
    def bark(self):
        print('嗷嗷嗷叫')


class Ceq(Dog):
    # 扩展:在子类中合适的地方调用父类的方法,并添加新方法
    def bark(self):
        print('嘻嘻嘻叫')
        # 调用父类方法的语法:super().方法名()
        # super(object) 是一个继承到 object 的类
        super().bark()
        print('哈哈哈叫')

xtq = Xtq('哮天犬')
xtq.bark()

ceq = Ceq('嫦娥犬')
ceq.bark()

 

8.多态

# 多态:不同的对象 调用 相同的方法,产生 不同的执行结果,以增加代码的灵活度

# 定义不同岗位的类
class Person:
    def work(self):
        print('人需要工作')


class Coder(Person):
    def work(self):
        print('开发人员 --> 工作是写代码')


class Tester(Person):
    def work(self):
        print('测试人员 --> 工作是测试项目')


# 定义 公司类,方法:查看不同岗位的工作, 参数:人类对象
# 在这个方法中调用 work方法
class Company:
    def show_work(self, worker):
        worker.work()


c = Company()
cc = Coder()
tt = Tester()
c.show_work(cc)  # 执行结果:开发人员 --> 工作是写代码

 

9.属性和方法

import random


# 1.1 类对象:就是 类,可理解为 类名
# 类对象是 python 解释器在执行代码的过程中创建的
class Game:
    # 2.1类属性:类 具有的属性信息
    # 定义:一般会在 类内部 方法外部 直接定义
    # 使用:类名.属性名
    top_score = 0

    # 3.1 实例方法:在 类内部 直接书写的方法
    # 使用:对象.方法名()
    def __init__(self, name):
        # 2.2 实例属性:实例对象 具有的属性信息
        # 定义:一般会在 init方法中定义
        # 使用:self.属性名
        self.name = name

    # 3.2 类方法:使用 @classmethod 装饰器的方法
    # 场景:不需要实例属性但需要类属性的时候
    # 使用方式一:类对象.方法名()
    # 使用方式二:实例对象.方法名()
    @classmethod  # 使用类方法
    def show_game(cls):
        print(f'游戏当前的最高分是:{Game.top_score}分')

    # 3.3 静态方法:使用 @staticmethod 装饰器的方法
    # 场景:既不需要实例属性也不需要类属性的时候
    # 使用方式一:类对象.方法名()
    # 使用方式二:实例对象.方法名()
    @staticmethod  # 使用静态方法
    def show_help():
        print('这是游戏的帮助信息')

    def start_game(self):
        print(f'{self.name}开始一局游戏,', end='')
        score = random.randint(10, 101)  # 本次游戏得分
        print(f'本次游戏得分为{score}')
        if score > Game.top_score:
            # 修改最高分
            Game.top_score = score


# 1.2 实例对象:用 类名() 创建的对象,类的实例化:创建对象的过程
xm = Game('小明')
xm.start_game()  # 执行结果:小明开始一局游戏,本次游戏得分为66
xm.show_game()  # 执行结果:游戏当前的最高分是:66分

xm.start_game()  # 执行结果:小明开始一局游戏,本次游戏得分为26
xm.show_game()  # 执行结果:游戏当前的最高分是:66分

xm.show_help()  # 执行结果:这是游戏的帮助信息

 

标签:__,name,04,python,self,面向对象,方法,def,属性
From: https://www.cnblogs.com/shiyi10086/p/16983791.html

相关文章

  • S1 - Lesson 103 - 104
    Wordsexamexaminationexaminationroomtesthaveatest TOEFL:TestofEnglishasaForeignLanguageIELTS:InternationalEnglishLanguageTestingSystem......
  • python-异常
    '''异常程序出现异常错误情况有两种编码报错-不符合语言的语法运行报错--异常程序运行气节时要避免异常的程序一旦出现异常就会终止......
  • 编辑ONNX模型的python代码
    参考:(8条消息)编辑ONNX模型的python代码_Alexa2077的博客-CSDN博客编辑ONNX的python代码一、ONNX模型的基本操作1,加载ONNX模型2,保存ONNX模型3,OP节点列表4,输入节点名称5,输......
  • Python怎么引入不同的库?
    怎么引入不同的库?在线安装库1)pipinstall模块名2)国内源:清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.aliyun.com/pypi/simple/中国科技......
  • Python Tkinter界面应用开发-黄棒清-专题视频课程
    PythonTkinter界面应用开发—1773人已学习课程介绍        如果你想在Python中构建图形用户界面应用程序,Tkinter是一个的选择.,TkInter应用程序几乎可以在任何桌面......
  • python-参数化
    '''参数化的作用将多个测试代码相同只是测试数据不同,预期结果不同的测试用例,通过参数化的技术合并成一个测试用例使用方法先安装parameterized(设置-py......
  • 深入理解 Python 的对象拷贝和内存布局
    深入理解Python的对象拷贝和内存布局前言在本篇文章当中主要给大家介绍python当中的拷贝问题,话不多说我们直接看代码,你知道下面一些程序片段的输出结果吗?a=[1,2,......
  • Python函数/动态参数/关键字参数
     1.函数#函数语法:#函数名规范:小谢字母开头,不同字母下划线隔开(字母数字下划线)#def函数名():#函数体:希望函数做的事情1.1.无参函数#无参函数defmusic():......
  • Python之Socket编程: 轻松连接你的应用程序
    前言什么是Socket?Python的Socket模块提供了一个标准的接口,可以让你使用网络连接来通信。Socket是一种网络通信技术,它提供了一个通用的接口来连接不同类型的网络,例......
  • python面向对象
    面向对象的三大特性:封装性,继承性,多态性。封装性封装隐藏了对象的属性和方法内部实现细节,仅对外提供公共访问方式,类的内部可以访问,外部不可以访问。封装格式:在变量或者方法前......