首页 > 其他分享 >class(类)

class(类)

时间:2023-04-21 15:37:41浏览次数:33  
标签:__ age class print 5G self def


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)  # 传入子类对象
 

标签:__,age,class,print,5G,self,def
From: https://www.cnblogs.com/liam-sliversucks/p/17340496.html

相关文章

  • Parcel E Class not found when unmarshalling 问题
    aidl传递bundle参数,bundle中又包含Parcel类,在调用bundle.getParcelable(key)时会有如下log报错,此时需要在调用bundle获取Parcel类的前调用bundle.setClassLoader(类对象.class.getClassLoader());================2023-04-2111:05:18.2023597-3597Parcel......
  • Class.forName和ClassLoader.loadClass
    一直都忘记他们的区别,在此坐下记录Class.forName("xx.xx")等同于 Class.forName("xx.xx",true,ClassLoader.getSystemClassLoader());//此时已经初始化实例对象了 而ClassLoaderloader=ClassLoader.getSystemClassLoader(); ClassclassName=loader.loadClass("xx.xx");//此......
  • 迁移学习(PAT)《Pairwise Adversarial Training for Unsupervised Class-imbalanced Dom
    论文信息论文标题:PairwiseAdversarialTrainingforUnsupervisedClass-imbalancedDomainAdaptation论文作者:WeiliShi,RonghangZhu,ShengLi论文来源:KDD2022论文地址:download 论文代码:download视屏讲解:click1摘要提出问题:类不平衡问题;解决方法:提出了一......
  • 检查java的class文件版本
     packagetest;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;publicclassCheckClassVersion{publicstaticvoidmain(String[]......
  • Tomcat报错严重: Unable to process Jar entry [module-info.class] from Jar
    Tomcat运行时出现UnabletoprocessJarentry[module-info.class]fromJar分析报错可知无法从Jar包中处理Jar条目[module-info.class]报错内容严重:UnabletoprocessJarentry[module-info.class]fromJar[jar:file:/D:/STS/Workspaces/Cloudview/.metadata/.plugins/......
  • python dataclasses定义默认值为可变类型(转)
    原文:https://zhuanlan.zhihu.com/p/59658886作者:没有50CM手臂网站:知乎 场景还原最近开发遇到一个问题是在python3.7的dataclass中不能使用可变的默认值,错误如下:@dataclassclassFoo:bar:list=[]#ValueError:mutabledefault<class'list'>forfieldaisn......
  • 理解 Python 的 Dataclasses第二篇(转)
    原文:https://zhuanlan.zhihu.com/p/59658598作者:没有50CM手臂网站:知乎这是Python最新的Dataclasses系列的第二部分内容。在第一部分里,我介绍了dataclasses的一般用法。这篇博客主要介绍另一个特征:dataclasses.field。我们已经知道Dataclasses会生成他们自身的__init__方法。......
  • 理解 Python 的 Dataclasses第一篇(转)
    原文:https://zhuanlan.zhihu.com/p/59657729作者:没有50CM手臂网站:知乎引言Dataclasses是一些适合于存储数据对象(dataobject)的Python类。你可能会问,什么是数据对象?下面是一个并不详尽的用于定义数据对象的特征列表:他们存储并表示特定的数据类型。例如:一个数字。对于那些熟悉......
  • tomcat6启动报错java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileH
    评:tomcat6启动报错在apache-tomcat-6.0.26/logs/catalina.out日志里面报错:java.lang.ClassNotFoundException:1catalina.org.apache.juli.FileHandler这个是由于apache-tomcat-6.0.26/bin/catalina.sh文件被修改过了,应该把下面的一行放在-Djava.util.logging.manager的前......
  • 浅谈dataclass和namedtuple
    之前有简单讲了下命名元组,现在联系数据类再做比较下目前发现,因为数据类和普通的类没什么差异,只是提供了简写__init__的语法糖,而且增加了类型注解,可以随意修改属性值而命名元组无法修改,除非返回一个新的实例[email protected]()5clas......