python笔记07----类和对象

文章介绍了Python中的面向对象编程概念,包括类与对象的创建,使用self引用实例属性,魔术方法如构造方法、字符串方法和比较方法的实现,以及封装的实践。此外,还涵盖了继承、复写、类型注解和多态等核心概念。
摘要由CSDN通过智能技术生成

目录

一、类和对象

二、魔术方法

构造方法

字符串方法

小于比较方法

小于等于比较方法

等于比较方法

 封装练习

三、继承

四、复写

五、类型注解

变量类型注解

函数和方法类型注解

Union类型注解

 六、多态


一、类和对象

类中创建函数的时候,必须要加self,当在函数中调用类中成员属性的时候,就要使用self了

class Student:
    name = None
    def say_hi(self):
        print(f"大家好,我是{self.name}")
    def say_hi2(self,msg):
        print(f"大家好,我的{self.name},{msg}")

s1 = Student()
s2 = Student()
s1.name = '张三'
s1.say_hi()         # 大家好,我是张三
s2.name = '李四'
s2.say_hi2("很高兴认识你们")   # 大家好,我的李四,很高兴认识你们
# 闹钟
class Clock:
    id = None       # 序列号
    piece = None    # 价格
    def ring(self):
        import winsound
        winsound.Beep(2000, 3000)   # 频率和时间
c = Clock()
c.id = '03003'
c.piece = 1832
c.ring()

二、魔术方法

内置的类方法,各有各的特殊功能,这些内置的方法称为魔术方法

常见的魔术方法有:

构造方法

class Person:
    # name = None
    # age = None
    # gender = None
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
        print(f"姓名:{self.name},年龄:{self.age},性别:{self.gender}")
p = Person('张三', 18, '男')   # 姓名:张三,年龄:18,性别:男

字符串方法

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"姓名:{self.name},年龄{self.age}"

p = Person("张三", 18)
print(p)
print(str(p))
# 没有使用字符串方法的输出
# <__main__.Person object at 0x000001D3A2713950>
# <__main__.Person object at 0x000001D3A2713950>

# 使用了字符串方法的输出
# 姓名:张三,年龄18
# 姓名:张三,年龄18

小于比较方法

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __lt__(self, other):
        return self.age < other.age
p1 = Person("张三", 18)
p2 = Person("李四", 20)
if p1 < p2:
    print(f"{p1.name}比{p2.name}小")
elif p1 == p2:
    print(f"{p1.name}和{p2.name}一样大")
else:
    print(f"{p1.name}比{p2.name}大")

小于等于比较方法

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __le__(self, other):
        return self.age <= other.age
p1 = Person("张三", 18)
p2 = Person("李四", 20)
if p1 <= p2:
    print(f"{p1.name}比{p2.name}小或者一样大")
else:
    print(f"{p1.name}比{p2.name}大")

等于比较方法

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __eq__(self, other):
        return self.age == other.age
p1 = Person("张三", 20)
p2 = Person("李四", 20)
if p1 == p2:
    print(f"{p1.name}和{p2.name}一样大")
else:
    print(f"{p1.name}和{p2.name}不一样大")

 封装练习

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("正在通话中")
p = Phone()
p.call_by_5g()

三、继承

继承语法

class 子类(父类):

多继承语法

class 子类(父类1,父类2......父类n):

注意,父类中有同名属性,优先级从左到右

四、复写

子类继承父类的成员属性和成员方法后,如果对其不满意,那么可以进行复写

即在子类中重新定义同名属性或方法即可

在复写父类中的属性或方法后,还要在子类中调用父类的同名属性和方法,需要使用父类名.属性或者super.属性的方法

五、类型注解

变量类型注解

定义一个函数,接收一个参数data,会发现在调用函数的时候,pycharm不会做出任何提示,因为pycharm不能确定这个data是什么类型的

 可以用冒号可以对进行类型注解,也可以在注释里面进行类型注解

# 基础数据类型注解
import random

val1: int = 10
val2: str = "张三"
val3: bool = True
# 类对象类型注解
class Person:
    pass
p: Person = Person()
# 基础容器类型注解
my_list: list = [1, 2, 3]
my_tuple: tuple = (1, 2, 3)
my_dict: dict = {"张三": 18}
# 容器类型详细注解
my_list2: list[int] = [1, 2, 3]
my_tuple2: tuple[int, str, bool] = (1, "张三", True)
my_dict2: dict[str, int] = {"张三": 18}
# 在注释中进行类型注解
import json
val4 = random.randint(1, 10)    # type: int
val5 = json.loads('{"name", 18}')   # type: dict[str, int]
# 类型注解的限制

上面只是说明了语法,实际操作中,一眼便能看出来类型的不用写注解,无法直接看出变量类型的时候会添加变量的类型注解

函数和方法类型注解

 

Union类型注解

Union(x,y)表示可以是x类型也可以是y类型,具体用法如下图

 六、多态

class Animal:
    def speak(self):
        pass

    def eat(self):
        pass
class Dog(Animal):
    def speak(self):
        print("小狗在说话")

    def eat(self):
        print("小狗在吃饭")

class Cat(Animal):
    def speak(self):
        print("小猫在说话")

    def eat(self):
        print("小猫在吃饭")

def Speak(animal: Animal):
    animal.speak()

def Eat(animal: Animal):
    animal.eat()

dog = Dog()
cat = Cat()
Speak(dog)      # 小狗在说话
Eat(cat)        # 小猫在吃饭

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值