python基本语法知识(五)——面向对象

这篇具有很好参考价值的文章主要介绍了python基本语法知识(五)——面向对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

类和对象

例子1

class Student:
    name = None
    gender = None
    nationality = None
    native_place = None # 籍贯
    age = None

    # 类内的成员方法,第一个参数必须为 self,
    # self相当于是当前对象
    def say_hi(self):
        print(f"大家好,我是{self.name}")
    def say_hi2(self, msg):
        print(f"大家好,我是{self.name}, {msg}")

# 2.创建对象
stu1 = Student()

# 3. 对象属性
stu1.name = "王伟"
stu1.gender = "男"
stu1.nationality = "中国"
stu1.native_place = "福建省"
stu1.age = 30

# 4.输出对象信息
print(stu1.name)
print(stu1.gender)
print(stu1.nationality)
print(stu1.native_place)
print(stu1.age)
stu1.say_hi()
stu1.say_hi2("多多关照")

输出结果:

王伟

中国

福建省

30

大家好,我是王伟

大家好,我是王伟, 多多关照

例子2:构造方法__init__()

与C++的构造函数类似:

class Student:
    # 这里声明其实不写也可以,构造方法里会自动声明+定义
    name = None
    age = None
    tel = None

    # !!
    def __init__(self, name, age, tel):
        self.name = name
        self.age = age
        self.tel = tel
        print("Student类创建了一个类对象")

stu1 = Student("陈奕迅", 39, 1292392992)
print(stu1.name)
print(stu1.age)
print(stu1.tel)

魔术方法

魔术方法类似于C++中的运算符重载

例子1:str 和 lt

这个方法的作用就是控制类转换为字符串时的行为

class Student:

    # !!
    def __init__(self, name, age, tel):
        self.name = name
        self.age = age
        self.tel = tel
        print("Student类创建了一个类对象")

    def __str__(self):
        return f"Student对象的成员name:{self.name}, age:{self.age}, tel:{self.tel}"
    # 相当于重载 < 运算符,使得对象可以用 < 和 >
    def __lt__(self,other):
        return self.age < other.age
    # 使得对象间 >= 和 <= 可用
    def __le__(self, other):
        return self.age <= other.age

    # ==运算符重载
    def __eq__(self, other):
        return self.age == other.age

stu1 = Student("陈奕迅", 39, 1292392992)
stu2 = Student("周杰伦", 39, 1239200233)
print(stu1 < stu2) # False
print(stu1 > stu2) # False
print(stu1 <= stu2) # True
print(stu1 >= stu2) # True
print(stu1 == stu2) # 如果类内没有实现 __eq__,则比较的时内存地址,False
print(stu1)

输出结果:

Student类创建了一个类对象

Student类创建了一个类对象

False

False

True

True

True

Student对象的成员name:陈奕迅, age:39, tel:1292392992

封装

例子1: 私有成员变量和方法

以两个下划线__ 开头的变量或方法,就是私有的成员

class Phone:
    # 成员名前有 __ 就是私有成员
    __current_voltage = 0.5 # 手机当前电压

    def __keep_single_core(self):
        print("CPU以单核模式运行")

    def call_by_5g(self):
        # 只有类内
        if self.__current_voltage >= 1:
            print("5g通话已开启")
        else:
            self.__keep_single_core()
            print("电量不足,无法使用5g通话,并设置为单核模式")

phone = Phone()

phone.call_by_5g();
# 类外无法使用私有成员,如下:
# print(phone.__current_voltage)
# phone.__keep_single_core()

输出结果:

CPU以单核模式运行

电量不足,无法使用5g通话,并设置为单核模式

继承

简单的说就是复用其他类的内容

语法: class 类名(父类名):

例子1

class Phone:
    IMEI = None
    producer ="Apple"

    def call_by_4g(self):
        print("4g通话")

# Phone2023 继承 Phone,或称作 Phone2023 派生自 Phone
class Phone2023(Phone):
    face_id = "10001"

    def call_by_5g(self):
        print("5g通话")

phone = Phone2023()
print(phone.producer)
phone.call_by_4g()
phone.call_by_5g()

输出结果:

Apple

4g通话

5g通话

例子2:多继承

class Phone:
    IMEI = None
    producer ="Apple"

    def call_by_4g(self):
        print("4g通话")

class NFCReader:
    nfc_type = "第五代"
    producer = "Samsung"

    def read_card(self):
        print("NFC读卡")

    def write_card(self):
        print("NFC写卡")

class RemoteControl:
    rc_type = "红外遥控"

    def control(self):
        print("红外遥控开启")

class MyPhone(Phone, NFCReader, RemoteControl):
    pass # 啥也不想写就填 pass

phone = MyPhone()
phone.call_by_4g()
phone.read_card()
phone.write_card()
phone.control()

# 注意Phone, NFCReader都有 producer 成员
# 注意这里 producer 使用的是Phone::producer,即继承中左边的类的成员
print(phone.producer)

输出结果:

4g通话

NFC读卡

NFC写卡

红外遥控开启

Apple

例子3:子类复写父类成员;子类使用父类的成员

class Phone:
    IMEI = None
    producer ="Apple"

    def call_by_5g(self):
        print("5g通话")

class MyPhone(Phone):
    # 复写父类的成员
    producer = "Nokia"

    def call_by_5g(self):
        print("开启CPU单核模式,确保通话时省电")
        # 使用父类成员方式1
        # print(f"父类的厂商是{Phone.producer}")
        # Phone.call_by_5g(self) # 注意这种方法要传 self

        # 使用父类成员方式2 super()
        print(f"父类的厂商是{super().producer}")
        super().call_by_5g()
        print("关闭CPU单核模式,确保性能")

phone = MyPhone()
phone.call_by_5g()
print(phone.producer)

输出结果:

开启CPU单核模式,确保通话时省电

父类的厂商是Apple

5g通话

关闭CPU单核模式,确保性能

Nokia

类型的注解

给类型加上注解之后,比如给函数参数加注解,则调用函数时,智能提示就能提示输入参数类型。

一般是无法看出来的参数类型才建议加注解

例子1

tu:Student = Student()

# 基础容器类型注解
my_list: list = [1, 2, 3]
my_tuple: tuple = (1, 2, 3)
my_dict: dict = {"lisi": 44}

# 容器类型详细注释
my_list1: list[int] = [1, 2, 3]
my_tuple1: tuple[int, str, bool] = (1, "apple", False)
my_dict1: dict[str, int] = {"lisi": 44}

# 在注释中进行类型注解
var_4 = random.randint(1, 10)  # type: int
var_5 = json.loads('{"name": "wangwu"}') # type:dict[str, str]
def func():
    return 10

var_6 = func() # type: int

# 类型注解的限制
# 如果注解和实际类型不符合,pycharm提示按用户注解来
var_7: int = "nokia"
var_8: str = 222

python基本语法知识(五)——面向对象

例子2:函数参数类型进行注解

# 对形参类型进行注解
def add(x: int, y: int):
    return x + y

# 对返回值进行类型注解
def func(data: list) ->list:
    return data


# 类型注解只是起提示作用,下面语句仍能正常运行
print(type(func(1))) # <class 'int'>

注解:

添加注解后,调用函数按下 ctrl + p会有如下提示

python基本语法知识(五)——面向对象

python基本语法知识(五)——面向对象

例子3:union联合类型注解

from typing import Union

# 表示列表元素类型可为 int 或 str
my_list: list[Union[int, str]] = [1, 2, 3]

# 表示函数参数类型可为 int 或str
def func(data: Union[int, str]) -> Union[int, str]:
    pass

python基本语法知识(五)——面向对象

python基本语法知识(五)——面向对象

多态

例子1

class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print("汪汪汪")

class Cat(Animal):
    def speak(self):
        print("喵喵喵")

# 根据不同参数来调用对应的对象,基类接受派生类
def make_noise(animal: Animal):
    animal.speak()

dog = Dog()
cat = Cat()
make_noise(dog)
make_noise(cat)

输出结果:

汪汪汪

喵喵喵

例子2

# 空调抽象基类
class AC:
    def cool_wind(self):
        pass

    def hot_wind(self):
        pass

    def swing_l_r(self):
        pass

class Midea_AC(AC):
    def cool_wind(self):
        print("美的空调制冷")

    def hot_wind(self):
        print("美的空调制热")

    def swing_l_r(self):
        print("美的空调左右摆风")

class GREE_AC(AC):
    def cool_wind(self):
        print("格力空调制冷")

    def hot_wind(self):
        print("格力空调制热")

    def swing_l_r(self):
        print("格力空调左右摆风")

def make_cool(ac: AC):
    ac.cool_wind()

midea_ac = Midea_AC()
gree_ac = GREE_AC()

make_cool(midea_ac)
make_cool(gree_ac)

输出:

美的空调制冷

格力空调制冷文章来源地址https://www.toymoban.com/news/detail-489792.html

到了这里,关于python基本语法知识(五)——面向对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++类和对象-多态->多态的基本语法、多态的原理剖析、纯虚函数和抽象类、虚析构和纯虚析构

    #includeiostream using namespace std; //多态 //动物类 class Animal { public:     //Speak函数就是虚函数     //函数前面加上virtual,变成虚函数,那么编译器在编译的时候就不能确定函数调用了。     virtual void speak()     {         cout \\\"动物在说话\\\" endl;     } }; //猫类 class Cat

    2024年02月20日
    浏览(26)
  • Python学习之路-面向对象:三个基本特征

    封装:根据职责将属性和方法封装到一个抽象的类中 继承:实现代码的重用,相同的代码不需要重复的编写 多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度 封装是面向对象编程的一大特点,面向对象编程的第一步就是将属性和方法封装到一个抽

    2024年02月02日
    浏览(43)
  • <C++> 类和对象-面向对象

    C语言是 面向过程 的,关注的是过程,分析出求解问题的步骤, 通过函数调用逐步解决问题。 C++是基于 面向对象 的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函

    2024年02月14日
    浏览(32)
  • <C++> 类和对象(上)-面向对象

    C语言是 面向过程 的,关注的是过程,分析出求解问题的步骤, 通过函数调用逐步解决问题。 C++是基于 面向对象 的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函

    2024年02月11日
    浏览(38)
  • python语法-面向对象数据分析案例(每日销售额柱状图数据可视化)

    面向对象数据分析案例(每日销售额柱状图数据可视化) 使用工具: Pycharm、面向对象、json模块、pyecharts模块等 实现步骤: 读取数据–封装数据对象–计算数据对象–pyechars绘图 (项目数据见文章末参考内容) 解析思路 是通过定义三个Python文件,各文件功能如下: data_d

    2024年02月08日
    浏览(33)
  • python基本语法知识(二)

    如果一个制表符 /t 不能对齐,可以多加几个; 只有将字典转换为字符串的时候才会保留字典的value,转成集合、列表、元组、都会丢失value 例子1: 输出: 字符串hello world长度为11 例子2:没有指定返回值,返回的就是None 输出: 3 + 2 的计算结果:6 None None等同与False 例子3:给

    2024年02月08日
    浏览(41)
  • python 面向对象的概念及使用方法~(基础小知识)

    编程语言中,一般有两种编程思维,面向过程和面向对象。 面向过程,看重的是解决问题的过程。 这好比我们解决日常生活问题差不多,分析解决问题的步骤,然后一步一步的解决。 而面向对象是一种抽象,抽象是指用分类的眼光去看世界的一种方法。 Python 就是一门面向

    2024年02月06日
    浏览(38)
  • C++面向对象程序设计 - 类和对象进一步讨论

            在C++中,关于面向对象程序设计已经讲了很大篇幅,也例举很多案例,此篇将通过一些习题来进一步了解对象、静态成员、指针、引用、友元、类模板等等相关知识。         示例代码:         如上代码,运行后结果如下图:          现在将上述代码中,第

    2024年04月16日
    浏览(50)
  • 【JavaSE语法】类和对象(一)

    1.1 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program,简称 OOP ),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要 依靠对象之间的交互完成一件事情 1.2 面向对象与面向过程 注意:面向过程和面相对象并不是一门语言,而是解决问

    2024年02月05日
    浏览(22)
  • 类和对象(上)--关于面向对象,类的定义,访问限定符,this指针

    二次修订于date:2024:3:6 C语言是一们面向过程的语言,关注的是函数执行的过程,数据和方法是分离的。 C++是一门面向对象的语言,主要关注对象,将一件事情抽象成不同的对象,靠对象间的交互来完成。对象与对象之间的交互叫做消息(举例外卖系统中,分为快递小哥,

    2024年03月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包