python-面向对象编程设计

目录

1.基础思路:

2.构造方法:

 3.其他魔术方法:

__str__(self): 把对象字符串化

 __lt__(self,other): 对象可以比较大小> <

__le__(self,other): 对象可以比较 >= <=

__eq__(self,other): 对象可以判断是否相等

 4.面向对象编程的三大特性

(1)封装

(2)继承

(3)多态

5.类型注释

6.类方法,静态方法,实例方法


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.类型注释

一般在无法直接看出变量类型的时候会添加变量的类型注解

 局限性:

不报错

只是备注,提示作用,不一定对

6.类方法,静态方法,实例方法

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值