Python学习笔记——Day9

学习参考视频:第二阶段-第一章-01-初识对象_哔哩哔哩_bilibili

Day9学习进度:二阶段第一章

知识点总结:

使用对象组织数据

在程序中设计表格,称之为设计类(class)

在程序中打印生产表格,称之为创建对象

在程序中填写表格,称之为对象属性赋值

class Student:
    name = None
# 记录学生姓名
stu_1 = Student()
stu_2 = Student()
# 基于类创建对象
stu_1.name = "周杰伦"
stu_2.name = "林俊杰"
# 为学生1对象赋予名称属性值
# 为学生2对象赋予名称属性值

类的定义和使用

class 类名称:   · class是关键字,表示定义类
    类的属性    · 类的属性,即定义在类中的变量(成员变量)
    类的行为    · 类的行为,即定义在类中的函数(成员方法)

创建类对象的语法:对象 = 类名称()

成员变量和成员方法

class student:
    name = None
    age = None
    
    def say_hi(self)
        print(f"Hi大家好,我是{self.name}")

stu = student()
stu.name = "周杰伦"
stu.say_hi()
# 输出Hi大家好,我是周杰伦

在类中定义的函数叫做成员方法,简称方法

成员方法的定义语法

def 方法名(self,形参1,形参2):
    方法体

self关键字是成员方法定义的时候必须填写的。

· 用来表示类对象自身

· 当使用类对象调用方法时,self会自动被python传入

· 在方法内部,想要访问类的成员变量,必须使用self

· 在传入参数时,self是透明的,可以不用理会

属性(成员变量)的赋值

Python类可以使用:__init__()方法,称之为构造方法。

可以实现:

· 在创建类对象(构造类)的时候,会自动执行

· 在创建类对象(构造类)的时候,将传入参数自动传递给__init__方法使用。

class Student:
    name = None
    age = None
    tel = None
# 以上三行定义同样可以省略,在下面方法的定义中可以自动声明变量
    def __init__(self,name,age,tel):
        self.name = name
        self.age = age
        self.tel = tel
        print("Student类创建了一个对象")

stu = Student("周杰伦",31,"12345")

Python内置的方法:魔术方法

__str__字符串方法

控制类对象转变为字符串的行为

__lt__ 大小于符号比较方法

传入参数:other,另一个类对象

__le__小于等于、大于等于符号比较方法,类似__lt__

__eq__相等判断,类似__lt__

class Student:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __lt__(self,other):
        return self.age < other.age

stu1 = Student("周杰伦",11)
stu2 = Student("林俊杰",13)
print(stu1 < stu2)# 结果:True
print(stu1 > stu2)# 结果:False

面向对象的三大特性:

封装、继承、多态

封装:将现实世界事物在类中描述为属性和方法,即为封装。

类中提供了私有成员的形式,这些无法被用户直接调用使用

只要定义成员变量或方法时以__开头(两个下划线)即可完成私有成员的设置。

私有成员无法被类对象使用,但是可以被其他的成员使用。

继承:将从父类那里继承(复制)来成员变量和成员方法(不含私有)

class 类名(父类名):

        类内容体

继承分为:单继承和多继承。

使用上述语法可以完成类的单继承。

多继承:一个子类可以继承多个父类,pass函数

class 类名(父类1,父类2,.....,父类N):
    pass
# 不需要添加其他内容,仅需要继承父类时,输入pass即可以

多个父类中,如果有多个同名属性、方法,优先级默认从左到右。

复写和使用父类成员

复写:子类继承父类的成员属性和成员方法后,可以复写以进行修改,对子类成员进行更新。在子类中重新定义同名的属性或方法即可。 

调用父类的同名成员

复写父类成员后,类对象调用成员的时候,就会调用复写后的新成员,想要调用父类的同名成员,可以通过以下方法:

1.通过父类名.成员(self)来进行调用

2.super().成员来进行调用

类型注解

pycharm无法通过代码确定应传入什么类型,需要使用类型注解。

类型注解可以在代码中涉及数据交互的地方,提供数据类型的注解(显示的说明)

主要功能:

· 帮助第三方IDE工具(如pycharm)对代码进行类型推断,协助做代码提示。

· 帮助开发者自身对变量进行类型注释

支持:

· 变量的类型注解

· 函数(方法)形参列表和返回值的类型注解

变量类型注解

基础语法

变量:类型

var_1: int = 10
var_2: float = 3.14159
var_3: bool = True

容器类型注解

注意:

· 元组类型设置类型详细注解,需要将每一个元素都标记出来

· 字典类型设置类型详细注解,需要2个类型,第一个是key第二个是value

还可以在注释中进行类型注解

语法:

# type: 类型

class Student:
    pass

var_1 = random.randint(1,10)  # type:int
var_2 = json.loads(data)      # type:dict[str,int]
var_3 = func()                # type:Student

一般只在无法看出变量类型的时候才会添加变量的类型注解。

函数(方法)的类型注解

def 函数方法名(形参名:类型,形参名:类型,……)->返回值类型:
    pass
def add(x:int,y:int)->int:
    return c=x+y

Union联合类型注解:from typing import Union    Union[类型,……,类型]

多态

多态:多种状态,即完成某个行为时,使用不同的对象会得到不同的状态

class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print("汪汪汪")

class Cat(Animal):
    def speak(self):
        print("喵喵喵")

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

dog = Dog()
cat = Cat()

make_noise(dog)    #输出:汪汪汪
make_noise(cat)    #输出:喵喵喵

多态常作用在继承关系上

比如

· 函数(方法)形参声明接受父类对象

· 实际传入父类的子类对象进行工作

即:

· 以父类做定义声明

· 以子类做实际工作

· 用以获得同一行为,不同状态

抽象类(接口)

上述代码中父类的speak方法是空实现,这种写法就叫做抽象类(也可以称之为接口)

设计用意:1.父类用来确定有哪些方法;2.具体方法的实现由子类自行决定。

抽象类:含有抽象方法的类称之为抽象类。

抽象方法:方法体是空实现的(pass)称之为抽象方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值