Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Python语言中,是否可以创建一个以实例变量作为参数的实例方法: var.method()?

在Python语言中,是否可以创建一个以实例变量作为参数的实例方法: var.method()?
EN

Stack Overflow用户
提问于 2021-10-24 04:49:01
回答 2查看 46关注 0票数 0

我已经在这个问题上挣扎了很长一段时间:我已经开始创建一个解决数独的代码,到目前为止,我已经成功地解决了大部分问题。我创建了一个名为" Sudoku“的类,它包含一个实例变量:带有所有插入数字的数独网格。

我还创建了一些方法,允许我访问或修改部分数独,目前还没有问题。但现在我必须引入一个新的实例变量,即带有数字注释的数独网格。问题出在我之前写的方法上。

代码是:

代码语言:javascript
运行
AI代码解释
复制
    def get_line(self, line):
    if 0 < line < 10:
        return self.sudoku[9*(line-1):9*line]
    return None

正如您在我刚刚编写的方法中所看到的那样

代码语言:javascript
运行
AI代码解释
复制
self.sudoku

(" Sudoku“是包含带有插入数字的网格的实例变量,它是一个包含81个元素的列表,这些元素是逐行插入的数独的数字),我直接修改了sudoku变量。但是现在我不能使用同样的方法访问带有注释的网格,因为它将返回数独的行。

我在想我能不能做这样的事

代码语言:javascript
运行
AI代码解释
复制
self.sudoku.get_line()

代码语言:javascript
运行
AI代码解释
复制
self.annotations.get_line()

其中我使用了一个方法,该方法将我在调用方法本身之前编写的变量作为参数。有没有可能写出这样的方法呢?

我知道有一些其他的方法可以解决这个特定的问题,但我想知道在Python中是否可以实现这样的事情。

感谢所有试图帮助我的人,我在其他地方找不到解决这个问题的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-24 09:32:05

好吧..。如果网格中的每个方块都包含一个数字和一个注释,那么每个方块都应该是一个类的实例,例如:

代码语言:javascript
运行
AI代码解释
复制
class SudokuSquare():
    def __init__(self, number=None, annotation=None):
        super().__init__(self)
        self.number, self.annotation = number, annotation

    def __str__(self):
        return '%s' % (self.number or '')

如果您使用这些类的实例填充列表,而不是纯整数,那么当您获取行时,您将立即获取所有内容。不需要有两个平行的网格。

然后,我的另一个建议是使用列表列表来表示行和列,如下所示:

类Sodoku():

代码语言:javascript
运行
AI代码解释
复制
def __init__(self):
    self.rows = []
    for _ in range(9):
        self.rows.append([ SukokuSquare() for _ in range(9) ])

def get_line(self, num):
    if num < 1 or num > 9:
        return None

    return self.rows[num-1]

实例化类Sudoku将为您提供一个数独对象,其中包含9行的列表,每行包含9个SudokuSquare的列表,每行都有一个用于存储numberannotation的位置。

现在,如果我想将第9行位置9的数字设置为值6,我会这样做:

字谜=数独() puzzle.get_line(9)8.number =6

但是,我仍然直接访问包含行(行)的列表,也许我不想这样做。然后您可能需要另一个名为SudukoRow的类,它有一个get_square方法……

我会把那部分留给你来试着弄清楚...

票数 0
EN

Stack Overflow用户

发布于 2021-10-24 09:09:33

如果我没理解错的话,你想

代码语言:javascript
运行
AI代码解释
复制
self.foo.getline(fie)
self.bar.getline(fum)

等同于

代码语言:javascript
运行
AI代码解释
复制
self.getline(foo, fie)
self.getline(bar, fum)

(有点像让getline拥有不同的“自我”)?

这就是Python,可能有一些可怕的技巧可以使用,但让foo和bar成为实现getline()的单独类的实例不是最明显的解决方案吗,Sudoku类可以委托给它们?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69696874

复制
相关文章
cmake/gcc:strip缩减程序体积
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/83212925
10km
2019/05/25
3.9K0
python数据类型-列表创建和操作
从字符串取数据的时候要分片,也就是切割。通过索引的形式,而这里用字符串取值的时候 每个角色取值的名字 长短不一,所以几个字符代表名字 ,是不可以的,血的值 也是经常变换的 所以显然字符串该被淘汰了。
py3study
2020/01/09
9500
linux LVM逻辑卷的创建,扩容,缩减和删除
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
用户4877748
2020/07/22
6.9K0
linux  LVM逻辑卷的创建,扩容,缩减和删除
Linux使用lvresize扩展或缩减lv大小
2.创建lv,名称是lv_u01,大小10g,从vg_jydb中划分空间,这里的vg_jydb是vg的名称。
Alfred Zhao
2022/05/06
2.2K0
使用Swift操作NSDate类型基础
  时间类型是我们在处理业务的时候使用非常频繁的一个数据类型。下面我们看一下时间NSDate的基本使用方法。
MJ.Zhou
2022/05/07
6710
使用Swift操作NSDate类型基础
PCS7 过程标签类型批量创建程序演示
PCS7的项目重在前期的布局,编辑好模板程序,设置好相应引脚的显隐、参数等,后续会减少大量工作量。熟练运用IEA过程标签类型导入导出,在组态大型的PCS7项目时会有很大优势。
剑指工控
2021/11/09
1.6K0
【应用安全】 使用Java创建和验证JWT
Java对JWT(JSON Web Tokens)的支持过去需要大量的工作:广泛的自定义,几小时的解析依赖关系,以及仅用于组装简单JWT的代码页。不再!
架构师研究会
2019/05/13
2.3K0
【应用安全】 使用Java创建和验证JWT
使用cargo创建rust程序并运行
我们按照文档在路径中打开命令行终端 cargo new world_hello 我们现在就可以运行了 cd .\world_hello\ cargo run 可以看到输出了Hello, world 我们用vscode打开 可以对我们的代码进行少许更改,然后再次运行 fn main() { println!("world, Hello!"); } 再次运行 cargo run 可以看到我们的修改生效
阿超
2022/08/21
4100
使用cargo创建rust程序并运行
006:Redis-Set集合类型操作使用
所谓的集合好比一个乾坤袋,什么东西都可以放进去,但是每个集合中的各个元素不能重复。
李玺
2021/11/22
3570
006:Redis-Set集合类型操作使用
Ubuntu根分区使用Lvm扩容
ubuntu 根分区剩余空间不足,影响工作,因此通过lvm工具对根文件系统进行扩容
全栈程序员站长
2022/08/31
3.8K0
Ubuntu根分区使用Lvm扩容
使用TortoiseGit操作分支的创建与合并
点击右键选择TortoiseGit,选择Create Branch…,在Branch框中填写新分支的名称(若选中”switch to new branch”则直接转到新分支上,省去第二步),点击OK按钮:
用户1518699
2018/09/12
2.2K0
使用TortoiseGit操作分支的创建与合并
【安全】XSS 类型
后面会把前端进阶的课程内容都总结一遍。有些都是很常见的知识,但是为了梳理自己的知识树,所以尽量模糊的地方都会记录
神仙朱
2019/11/18
1K0
【C 语言】指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )
测试 指针 变量占用的内存空间大小 : 定义一个 int * 指针类型变量 , 使用 sizeof 函数 获取该变量的大小 ;
韩曙亮
2023/03/29
6860
【C 语言】指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )
Nova创建实例类型
创建一个实例类型名为:至尊型,ID为zzx,内存为8192M,系统盘为50G,CPU为8核,临时磁盘为:1G
院长技术
2021/02/19
1.1K0
Nova创建实例类型
004.LVM缩减
1 减少文件的大小一定需要按照上面提高的4个规定动作顺序来做,在缩减LV大小前,首先要缩减filesystem的大小,否则将导致文件系统破坏等恶劣影响。
木二
2019/07/26
4520
Android如何缩减APK包大小
代码 保持良好的编程习惯,不要重复或者不用的代码,谨慎添加libs,移除使用不到的libs。 使用proguard混淆代码,它会对不用的代码做优化,并且混淆后也能够减少安装包的大小。 native code的部分,大多数情况下只需要支持armabi与x86的架构即可。如果非必须,可以考虑拿掉x86的部分。 资源 使用Lint工具查找没有使用到的资源。去除不使用的图片,String,XML等等。 assets目录下的资源请确保没有用不上的文件。 生成APK的时候,aapt工具本身会对png做优化,但是在此之前
六月的雨
2018/05/14
1K0
Pandas类型操作
官网地址:https://pandas.pydata.org/docs/reference/api/pandas.to_numeric.html
皮大大
2023/08/25
2870
如何使用 Flutter 创建桌面应用程序[Flutter专题7]
开发人员可以选择编写多种类型的应用程序:控制台应用程序、移动应用程序、Web 应用程序和桌面应用程序。
徐建国
2021/11/30
4.7K0
如何使用 Flutter 创建桌面应用程序[Flutter专题7]
【Rust日报】2021-11-17 Neon - 使用 Rust 创建内存和类型安全的 Node.js 模块
Neon除了内存和类型安全之外,应该在 Node.js 中使用 Rust Embedding 的原因还有很多。
MikeLoveRust
2021/11/22
5940
点击加载更多

相似问题

如何使用根缩减程序配置存储

10

为相似类型的操作创建一个缩减程序

120

Python:使用`copyreg`为已有缩减程序的类型定义缩减程序

11

使用生成类型提供程序创建多个根类型

10

Redux操作不触发缩减程序

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档