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(也就是说方法没有具体实现)