目录
__lt__(self,other): 对象可以比较大小> <
__le__(self,other): 对象可以比较 >= <=
__eq__(self,other): 对象可以判断是否相等
1.基础思路:
class Student:
name=None
id=None
age=None
gender=None
nationality=None
score=None
def say_hi(self):
print(f"大家好呀,我是{self.name},欢迎大家多多关照")
stu_1=Student()
stu_1.id=21;
stu_1.age=18;
stu_1.gender='man';
stu_1.nationality='China'
stu_1.score='100'
print(stu_1.id)
print(stu_1.score)
print(stu_1.age)
print(stu_1.nationality)
print(stu_1.gender)
stu_1.name='zhou'
stu_1.say_hi()
类
对象:类的实例
2.构造方法:
class Student:
#name=None
#id=None
#age=None
#gender=None
#nationality=None
#score=None
def __init__(self,name,id,age,gender,nationality,score):
self.gender=gender
self.score=score
self.id=id
self.name=name
self.age=age
self.nationality=nationality
print("thank you")
stu=Student("zhou",21,18,'man',"CHINA",100)
应用:
class Student:
def __init__(self,name,age,home,id):
self.id=id
self.name=name
self.age=age
self.home=home
print(f"学生{id}信息录入完成,信息为:【学生姓名:{self.name},年龄:{self.age},地址:{self.home}】")
for id in range(1,11):
name=input("请输入学生姓名:")
age=input("请输入学生年龄:")
home=input("请输入学生地址:")
stu=Student(name,age,home,id)
3.其他魔术方法:
__str__(self): 把对象字符串化
class Student:
def __init__(self,name,age,home,id):
self.id=id
self.name=name
self.age=age
self.home=home
print(f"学生{id}信息录入完成,信息为:【学生姓名:{self.name},年龄:{self.age},地址:{self.home}】")
stu=Student('zhou',18,'china',21)
print(stu)
print(str(stu))
class Student:
def __init__(self,name,age,home,id):
self.id=id
self.name=name
self.age=age
self.home=home
print(f"学生{id}信息录入完成,信息为:【学生姓名:{self.name},年龄:{self.age},地址:{self.home}】")
def __str__(self):
return f"zhou is a man,his home is {self.home},his id is {self.id},his age is {self.age}"
stu=Student('zhou',18,'china',21)
print(stu)
print(str(stu))
__lt__(self,other): 对象可以比较大小> <
class Student:
def __init__(self,name,age,home,id):
self.id=id
self.name=name
self.age=age
self.home=home
print(f"学生{id}信息录入完成,信息为:【学生姓名:{self.name},年龄:{self.age},地址:{self.home}】")
def __lt__(self, other):
return self.age<other.age
stu=Student('zhou',18,'china',21)
stu1=Student('g',19,'china',14)
print(stu<stu1)
print(stu>stu1)
__le__(self,other): 对象可以比较 >= <=
class Student:
def __init__(self,name,age,home,id):
self.id=id
self.name=name
self.age=age
self.home=home
print(f"学生{id}信息录入完成,信息为:【学生姓名:{self.name},年龄:{self.age},地址:{self.home}】")
def __le__(self, other):
return self.age<=other.age
stu=Student('zhou',18,'china',21)
stu1=Student('g',18,'china',14)
print(stu<=stu1)
print(stu>=stu1)
__eq__(self,other): 对象可以判断是否相等
class Student:
def __init__(self,name,age,home,id):
self.id=id
self.name=name
self.age=age
self.home=home
print(f"学生{id}信息录入完成,信息为:【学生姓名:{self.name},年龄:{self.age},地址:{self.home}】")
def __eq__(self, other):
return self.age==other.age
stu=Student('zhou',18,'china',21)
stu1=Student('g',18,'china',14)
print(stu==stu1)
注意:在使用__eq__(self,other)之前,两者也可以通过==判断,只不过比较的是内存地址是否相同,两个不同对象内存地址一定不同
class Student:
def __init__(self,name,age,home,id):
self.id=id
self.name=name
self.age=age
self.home=home
print(f"学生{id}信息录入完成,信息为:【学生姓名:{self.name},年龄:{self.age},地址:{self.home}】")
stu=Student('zhou',18,'china',21)
stu1=Student('g',18,'china',14)
print(stu==stu1)
class Student:
def __init__(self,name,age,home,id):
self.id=id
self.name=name
self.age=age
self.home=home
print(f"学生{id}信息录入完成,信息为:【学生姓名:{self.name},年龄:{self.age},地址:{self.home}】")
stu=Student('zhou',18,'china',21)
stu1=Student('zhou',18,'china',21)
print(stu==stu1)
4.面向对象编程的三大特性
(1)封装
__+成员属性/函数->私有属性/函数
类对象不可以访问使用,类中其他成员可以访问
应用:
class Phone:
__is_5g_enable=False
def __check_5g(self):
if self.__is_5g_enable:
print("5g开启")
else:
print("5g关闭,使用4g网络")
def call_by_5g(self):
self.__check_5g()
print("正在通话中")
iPhone=Phone()
iPhone.call_by_5g()
(2)继承
单继承:class 子类(父类):
多继承:class 子类(父类1,父类2,......):
多继承父类有同名方法或属性,左边优先而不是覆盖,即先继承的优先级高
复写:子类复写父类的方法和属性,实现覆盖
在子类中如何调用父类成员(只可以在子类中调用和父类同名的成员,子类的实体类对象调用默认是调用子类复写的)
1.父类名.成员变量
父类名.成员方法(self)
2.super().成员变量
super().成员方法()
(3)多态
同样的行为(函数),传入不同的对象,得到不同的状态
多态常作用在继承关系上:
以父类做定义声明,以子类做实际工作,用以获得同一行为,不同状态
抽象类(接口):含有抽象方法(pass)的类
作用:作顶层设计,以便子类作具体实现,也是对子类的软性约束,要求子类必须复写(实现)父类的一些方法
例子:
class Language:
def speak(self):
pass
def write(self):
pass
class Chinese(Language):
def speak(self):
print("你好,谢谢")
def write(self):
print("中国")
class English(Language):
def speak(self):
print('Hello!Thank you!')
def write(self):
print('China')
def communication(lang:Language):
lang.speak()
lang.write()
chinese=Chinese()
english=English()
communication(chinese)
communication(english)
5.类型注释
一般在无法直接看出变量类型的时候会添加变量的类型注解
局限性:
不报错
只是备注,提示作用,不一定对