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
stu = Student("小明",18,15811112222)
其他内置方法
- 上文学习的__init__构造方法,是PYTHON类内置的方法之一
- 这些内置的类方法,各自有各自特殊的功能,这些内置方法我们称之为:魔术方法
- 例:__init__、__str__(字符串方法)、__lt__(小于比较方法)、__le__(小于等于比较方法)、__eq__(比较运算符实现方法)
封装
-
将现实世界事物再类中描述为属性和方法,即为封装
-
私有成员:
- 私有成员变量:变量名以__开头
- 私有成员方法:方法名以__开头
-
私有成员无法被类对象使用,但是可以被其他的成员使用
继承
- 单继承
# 例
class People:
name = None
age = None
tel = None
def __init__(self,name,age,tel):
self.name=name
self.age=age
self.tel=tel
def __str__(self):
return f"姓名:{self.name},年龄{self.age}岁,电话{self.tel}"
class Student(People):
grade = None
def __init__(self,name,age,tel,grade):
self.name=name
self.age=age
self.tel=tel
self.grade=grade
stu = Student("小明",18,15311112222,"大二")
print(stu)
- 多继承
- class 子类(父类1,父类2,...):
- 若父类之间存在名字相同的成员,优先继承括号中靠左父类的成员
* pass:本身为空,让语法不产生错误
复写
- 在子类中重新定义父类中同名的属性或方法
- 如果需要使用被复写的父类成员,需要特殊的调用方式:
- 父类.成员或方法(self)
- super().方法或成员
- 只能在子类内部调用父类的同名成员,子类的实体类对象调用默认是调用子类复写的
类型注解
-
PYTHON在3.5版本引入了类型注解,以方便静态类型检查工具,IDE等第三方工具
-
类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显式的说明)
-
类型注解仅仅是提示性的,不是决定性的
-
支持:
- 变量的类型注解
- 函数(方法)形参列表和返回值的类型注解
-
变量的类型注解:
- 基础语法: 变量:类型
- 在注释中使用类型注解的语法: # type:类型
-
函数(方法)的类型注解:
def 函数方法名(形参:类型,形参:类型,形参:类型...) -> 返回值类型:
-
Union类型:
# 例 from typing import Union my_dict: dict[str,Union[str,int]] = {"name":"小明","age":18} def func(data:Union[int,str]) -> Union[int,str]: pass
多态
- 在完成某个行为时,使用不同的对象会得到不同的状态
# 例
class Animal:
def speak(self):
print("**************")
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)
抽象类(接口)
- 父类用来确定有哪些方法(pass),具体的方法实现由子类决定,这种写法叫做抽象类
- 抽象类多用于顶层设计(设计标准),以便子类做具体实现
- 对子类的软性约束,要求子类必须复写(实现)父类的一些方法