返回顶部

class(类)


Class类学习

  • 学习类,以及类的有关方法,都基本到了这门语言语法的末尾章节了。类相较于其他知识点也是比较难理解的。如构造方法,类的继承,多态。

1,类的构造方法

  • 1,构建类的方法的时候会自动执行

  • 2,构建类对象的传参会传递给构造方法

  • 3,构造方法可以给类的成员变量赋值

写法

__init__(self):

Demo

class Student_info:
   #此处的定义可以不写,因为在self方法中self.name 既有赋值功能也有定义的功能
   name = None
   age = None
   tel = None

   def __init__(self, name, age, tel):
       self.name = name
       self.age = age
       self.tel = tel
       print('Student类创建了一个类对象')


student = Student_info('周杰伦',18,'123123213')
print(f"我叫{student.name},年龄{student.age},电话号码是{student.tel}")

2,魔术方法(str, lt, le, eq)

Demo

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

   def __str__(self):      #使用此方法后,打印stu1类对象就不再是内存地址,而是自定义的字符串
       return f'我的名字是{self.name},年龄是{self.age}'

   def __lt__(self, other):    #判断该类对象的age是否大于另一个类对象的age
       return self.age > other

   def __le__(self, other):    #判断该类对象的age是否大于或等于另一个类对象的age
       return self.age >= other

   def __eq__(self, other):    #判断该类对象的age是否等于另一个类对象的age
       return self.age == other


stu1 = Student("凌俊杰", 18)
stu2 = Student("周杰伦", 20)
print(stu2)
print(stu1 > stu1)

3,私有成员变量和成员方法

  • 类对象无法访问私有成员,但是类中其他成员可以访问私有成员

Demo

class Phone:
   __is_5G_enable = True       #定义私有成员变量

   def __check_5G(self):       #定义私有成员函数
       if self.__is_5G_enable == True:     #私有成员函数访问私有成员变量
           print("5G开启")
       else:
           print("5G关闭,开启4G网络")

   def call_by_5G(self):
       self.__check_5G()       #通过类中的成员方法去访问私有成员函数
       print("正在通话中")

phone = Phone()     #将类实例化
phone.call_by_5G()  #调用类的公开方法

 

4,继承(单继承和多继承)

Demo

class Phone:
   IMIE = None  # 序列号
   producer = 'Itcast'  # 生产厂商

   def call_by_4g(self):
       print("4G通话")


class Phone2023(Phone):  # 继承Phone这个类
   face_id = '13223'

   def call_by_5g(self):
       print("开启5G新时代")


class NFC_Reader:
   producer = 'Tecent'

   def read_card(self):
       print("NFC读卡")

   def write_card(self):
       print("NFC写卡")


class Remote_Control:
   rc_type = '红外遥控'

   def control(self):
       print("红外遥控器开启")
class MyPhone(Phone2023,Remote_Control, NFC_Reader):
   pass
phone = MyPhone()
phone.read_card()
phone.write_card()
phone.control()
phone.call_by_4g()
phone.call_by_5g()
print(phone.producer)

5,复用

  • (子类对父类的某些函数或者变量不满意时可以采用复用)

Demo

class Phone:
   producer = 'itcast'

   def call_by_5G(self):
       print('5G通话开启')
class MyPhone(Phone):
   producer = 'itheima'

   def call_by_5G(self):
       print('开启单核模式,确保CPU执行时省电')
       #调用父类的成员函数和成员方法,两种调用方法,super()或者是Phone直接写父类
       print(f"父类的生产厂商是:{Phone.producer}")
       super().call_by_5G()
       print("5G通话关闭")
       
       
phone = MyPhone()       #将类实例化
phone.call_by_5G()

 

6,类型注解

Demo

import random
import json
class Student:
   pass
stu: Student = Student()
list1: list = [1, 2, 3]     #基础容器类型注解
list2: list = [1, 2, 3]    #详细容器类型注解
my_tuple: tuple= (1, 'itheima',True)    #详细容器类型注解
var1 = random.randint(1,10)  #type: int
var2 = json.loads('{"name": "zhangsan"}')   #type: dict[str, str]
def func():
   return 10
var3 = func()   #type: int

7,对形参类型和返回值进行注解

  • 对形参类型进行注解要写在函数形参的括号中

  • 对返回值进行注解要在括号之后冒号之前进行注解(如 -> )

Demo

def func(x: int, y: int) -> int:
   return x + y
ret = func(2, 5)
print(ret)

def func1(data: list) -> list:
   return data
print(func1(1))     #这里说明函数的注解只是提示性的而非强制性的,哪怕参数传递的不对也不会给报错

8,Union联合类型注解

Demo

from typing import Union  #(使用Union之前必须先导包)

#首先先写个普通的注解
my_list: list[Union[int, str]] = [1, 2, 'itheima', 'itcast']    #此注解表明我的list是个int和str混合类型

def func(data: Union[str, int]) -> Union[int, str]: #表明函数的参数和返回值为int或者str类型
   pass
func()  #在函数上面按住CRTL+ P会看到提示传入参数的类型为data[int, str]类型

9,多态

Demo

class AC:  # 定义抽象类(好比是一个标准),包含抽象方法(没有具体实现的方法叫做抽象方法),要求子类必须实现
   def cool_wind(self):  # 吹冷风
       pass

   def hot_wind(self):  # 吹热风
       pass

   def swing_l_r(self):  # 左右摆风
       pass


class Midea_AC(AC):  # 美的空调类继承AC类,复写AC类的抽象方法
   def cool_wind(self):
       print("美的空调核心制冷科技")

   def hot_wind(self):
       print("美的空调电热丝加热")

   def swing_l_r(self):
       print("美的空调无风感左右摆风")


class Gree_AC(AC):  # 格力空调类继承AC类,复写AC类的抽象方法
   def cool_wind(self):
       print("格力空调核心制冷科技")

   def hot_wind(self):
       print("格力空调电热丝加热")

   def swing_l_r(self):
       print("格力空调无风感左右摆风")


def make_cool(ac: AC):  # 该吹风函数形参为ac,而且是一个AC类型的参数
   ac.cool_wind()  #


# 一般不会构建抽象类的对象,也就是不将抽象类(AC)实例化,而是将抽象类的子类实例化
gree_ac = Gree_AC()  # 实例化空调类对象
midea_ac = Midea_AC()  # 实例化空调类对象
make_cool(gree_ac)  # 传入子类对象
 
posted @ 2023-04-21 15:23  FlowersandBoys  阅读(70)  评论(0编辑  收藏  举报