Python入门学习(十二)---面向对象

1在这里插入图片描述

语法格式

#设计一个类
class Student:
	#属性
    name=None
    gender=None
    nationality=None
    native_place=None
    age=None
    #方法
	def say_hi():
	print("Hello world")
#创建一个对象
stu_1=Student()
#给对象赋值
stu_1.name="lihua"
stu_1.gender="男"
stu_1.nationality="中国"
stu_1.native_place="河南省"
stu_1.age=21
#获取对象中记录的信息
print(stu_1.age)
print(stu_1.name)
类的定义和使用

在这里插入图片描述

self关键字

通过self来访问类的成员变量(也就是类的属性)
在这里插入图片描述
self在方法定义时候必须填写(相当于java中的this关键字)

class Student:
	name=None
	def say_hi(self):
	print(f"我的名字是{self.name}")

构造方法

 def __init__(self,name,gender,age):
        self.name=name
        self.gender=gender
        self.age=age

在这里插入图片描述
在这里插入图片描述

注意:构造方法中的参数合并了类的成员变量,即类的属性可以不写,直接在构造方法的参数中写出即可

综合案例:依次录入10位同学的信息并打印学生信息

在这里插入图片描述

#设计学生类
class Student:
    name=None
    age=None
    address=None
    #构造方法
    def __init__(self,name,age,address):
        self.name=name
        self.age=age
        self.address=address

for i in range(1,11):
    print(f"当前录入第{i}位同学的信息,一共需要录入10位同学的信息")
    stu_msg=Student(input("请输入学生名字:"),input("请输入学生年龄:"),input("请输入学上地址:"))
    print(f"学生{i}的信息录入完成,信息为:[学生姓名为{stu_msg.name},学生年龄为{stu_msg.age},学生地址为{stu_msg.address}]")

python类内置方法

与javaj中的tostring作用一样
#在类中定义
def __str__(self):
	return f"名字为{self.name},年龄为{self.age}"
#实现
stu=Student()
print(str(stu))

__it__方法用于大小比较,返回True或False
#other表示另一个类的对象
def __it__(self,other):
	return self.age<other.age

#le方法可用于<=,>=两种比较运算符上
def __it__(self,other):
	return self.age<=other.age

#eq方法用于==
def __eq__(self,other)
	return self.age<=other.age
注意eq方法不实现的话,对象之间比较的是内存地址,结果一定是false. 而实现eq方法后,则就可以按照用户的想法来决定两个对象是否相等

面向对象三大特性:封装、继承和多态

1、封装
私有成员

python中定义私有成员:
私有成员变量:变量名以__开头(两个_)
私有成员方法:方法名以__开头(两个_)

#定义一个手机类
class Phone:
    #定义私有变量
    __coltage=None
    #定义私有方法
    def __say_hi(self):
        print("Hello world")

类中的公有方法可以通过self调用类中的私有方法和私有变量
在这里插入图片描述

2、继承

python支持单继承和多继承

单继承

在这里插入图片描述

class Phone:
    Imet=None
    Producer=None

    def call_by_4g(self):
        print("4G")

class Phone2022(Phone):
    face_id="1001" #面部识别ID

    def call_by_5g(self):
        print("2022年新功能是5G")

phone=Phone2022()
phone.call_by_4g()
phone.call_by_5g()
多继承

在这里插入图片描述

class Phone:
    Imet=None
    Producer=None

    def call_by_4g(self):
        print("4G")

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

    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关键字补全语法
    pass

#实现
myphone=Myphone()
myphone.call_by_4g()
myphone.read_card()
myphone.write_card()
myphone.control()

注意:pass关键字用于补全语法,保证函数正常运行,如果继承的不同父类中有相同名字的成员变量,则会默认按照继承顺序(从左至右)选择class Myphone(Phone,NFCReader,RemoteControl):
#第一个父类中
producer="HM"

#第二个父类中
producer="ITcast"

#实现
print(phone.producer)
复写

子类继承父类的成员属性和成员方法后,如果对其不满意,则可以重写,即在子类中定义同名的属性和方法即可

子类在复写父类的成员属性和成员方法后,如果想要调用父类的成员属性和方法,则需要借助super()方法

#方法1
父类名.成员变量
父类名.成员方法

#方法2:使用super()调用
super().成员变量
super().成员方法

类型注解

在这里插入图片描述

#基础数据类型注解
var_1:int=10
var_2:str="你哈"
var_3:bool=True
#类对象注解
class Student:
    pass
stu:Student=Student()

#基础容器注解
my_list:list=[1,2,3]
my_tuple:tuple=(1,3,4)
my_set:set={2,3,4}
my_dict:dict={1:2,2:"你哈"}
my_str:str="itheima"

在注释中进行注解
#type:类型

var_1:int=10 #type:int
var_2:str="你哈" #type:str
var_3:bool=True #type:bool

函数参数注解和函数返回值注解

在这里插入图片描述

返回值类型注解 使用 -> :来对返回值进行注解

def add(x : int,y: int) -> int:
	return x+y
Union联合注解

在这里插入图片描述

在这里插入图片描述

3多态

多态即多种状态,完成某个行为时候,使用不同的对象会得到不同的状态
在这里插入图片描述

抽象类配合多态来实现

在这里插入图片描述
含有抽象方法的类就是抽象类,抽象方法的方法体是pass(也就是说方法没有具体实现)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值