首页 > 其他分享 >day25 面向对象高阶

day25 面向对象高阶

时间:2023-12-23 21:11:23浏览次数:25  
标签:__ return day25 self 面向对象 print 高阶 def cls

复习
@classmethod方法 类内部使用@classmethod修饰器的方法就是绑定到类的方法→类方法 类方法可以直接通过类调用而无需实例化

def __init__(self): 类的构造函数 创建一个实例(对象)时自动调用

在py中self和cls只是约定俗成的命名,没有特殊的含义
self通常作为对象方法的第一个参数,指代对象本身
cla通常作为类方法的第一个参数,指代类本身

class Worker:

def __init__(self, name, age, height, salary):
self.name = name
self.age = age
self.height = height
self.salary = salary

@classmethod
def str_handler(cls, string):
name, age, height, salary = string.split('/')
# 将传入的字符串以/分割产生列表,一一对应
return cls(name, age, height, salary)
# 这里return返回的是一个类对象
# 要注意return返回值可以被变量接收,接收后就成为类对象了
A = 'Jack/20/1.75/1000'
a = Worker.str_handler(A)
print(a)
b= Worker('yjw',26,175,400000)
print(b)

打印结果:
<__main__.Worker object at 0x000002CB14E812D0>
<__main__.Worker object at 0x000002CB14E81350>

 

 

单例模式:
为了实现同一种调用方式得到的对象是一样的
class Vio:
def __init__(self,shape,width):
self.shape = shape
self.width = width

w1=Vio('water',35)
print(w1)
w2=Vio('water',35)
print(w2)


打印结果:
<__main__.Vio object at 0x000001A1BA4B0F90>
<__main__.Vio object at 0x000001A1BA4B1110> #直接调用即使初始化参数一样但实际上不是同一个对象

利用装饰器实现单例模式:
SHAPE='swater'
WIDTH='36'
def deco(cls):
instance=cls(SHAPE,WIDTH)#初始化对象
def wrapper(*args, **kwargs):
if len(args)==0 and len(kwargs)==0:
return instance#这里千万不能写return cls(SHAPE,WIDTH)
else:
return cls(*args, **kwargs)
return wrapper
@deco
class Vio:
def __init__(self,shape,width):
self.shape = shape
self.width = width

w1=Vio()
w2=Vio()
print(w1==w2)
print(w1)
print(w2)

打印结果:
True
<__main__.Vio object at 0x0000023F704D1850>
<__main__.Vio object at 0x0000023F704D1850>


异常处理:
try:
1/0
except Exception as e:
print(e)

打印结果:
division by zero

raise 主动抛出异常

 

标签:__,return,day25,self,面向对象,print,高阶,def,cls
From: https://www.cnblogs.com/yyyjw/p/17923628.html

相关文章

  • C语言实现面向对象的方法详解
    结构体替代类使用结构体来封装变量和函数,即可实现类似对象的功能。其中,结构体包含变量和函数指针,变量用于存储成员变量的值,函数指针用于实现成员函数的功能。而每个对象的变量是独立的,因此可以使用这种方法实现类似对象的功能。下面是一个例子,以封装一个“人”的结构体为例:typ......
  • 无涯教程-PL/SQL - 面向对象
    在本章中,无涯教程将讨论面向对象的PL/SQL,PL/SQL允许定义对象类型,这有助于在Oracle中设计面向对象的数据库,对象类型允许您创建复合类型。使用CREATE[ORREPLACE]TYPE语句创建对象,以下是创建由几个属性组成的简单address对象的示例-CREATEORREPLACETYPEaddressASOBJECT......
  • Smalltalk 语言(面向对象的鼻祖语言)
    基础语法看一下这些基础语法,便能够读懂大部分的代码内容。注释:用双引号包围。"这是注释"字符串:用单引号包围。'这是一个字符串'单个字符:$c符号(Symbol):#thisIsASymbol大家也许对符号这个概念比较陌生。简单来说,只要两个符号的值一样,那么它们在内存中也是相同的对象。变量声明:|a|,......
  • day24 面向对象进阶
    day24开始2023年12月20日周三12:25:36类的组合:把类对象当做变量值、参数、返回值、容器元素使用,这样可以间接使用类对象的方法classF1:passclassF2:passf1=F1()f2=F2()f1.f2=f2#等号前面的f2是f1属性的名字(key)等号后面的f2是F2类实例化出来的一个对象(value)现将......
  • 15.高阶定位-CSS 定位与原生定位
    目录原生定位cssselector定位原生定位官网地址元素属性定位组合定位#ID定位driver.find_element_by_android_uiautomator('\newUiSelector().resourceId("<element-ID>")')#组合定位driver.find_element_by_android_uiautomator('\newUiS......
  • day23 面向对象进阶
    属性查找顺序:对象本身→类对于类而言,self就是一个普通形参对于对象而言,self就是对象本身 类的继承:减少重复#自己写的时候不推荐使用继承继承多个的时候功能会混乱继承后子类会拿到父类的所有东西classfather():classson(father):继承后的属性查找顺序:对象自己→类→父......
  • 秦疆的Java课程笔记:76 面向对象 N中内部类
    内部类就是在一个类的内部再定义一个类。比如,在A类中定义一个B类,那么B类相对于A类来说就是内部类;相反,A类相对于B类就是外部类。秦疆老师声明,这小节主要是长长见识,实际编程作业中不推荐下列写法。成员内部类//先写一个有内部类的类=============================publiccl......
  • 刘方舟 VC++面向对象与可视化程序设计 黄维通
    注:由于题目不确定,整理知识点范围比较宽,适当选取1.内联函数     定义:定义在类体内的成员函数,即函数的函数体放在类体内     特点:在调用处用内联函数体的代码来替换,用于解决程序的运行效率问题。一定要在调用之前定义,并且内联函数无法递归调用。2.构造函数与析构......
  • Java面向对象程序设计(上海交通大学出版社)12章及以后的课后问题解析
    1)Map集合和Collection集合的区别是什么? Map集合和Collection集合都是Java集合框架中的接口,它们之间有一些关键的区别:元素存储方式:Collection:用于存储单一元素的集合接口。它继承自Iterable接口,包含常见的子接口如List、Set。Map:用于存储键值对(key-value......
  • 29道C++ 面向对象高频题整理(附答案背诵版)
    1、什么是类?在C++中,类是一种用户定义的数据类型,它可以包含数据成员和函数成员。数据成员用于存储与类相关的状态,而函数成员可以定义对这些数据进行操作的方法。可以把类想象为一个蓝图,根据这个蓝图可以创建对象,这些对象在内存中是类的实例。比如说,我们可以定义一个Car类来表示汽......