【发布时间】:2021-04-03 01:21:10
【问题描述】:
我在创建字典的类中定义一个方法。这本字典只是给字母表中的每个字母一个值。所以该方法不会操纵该类的任何实例。在这种情况下,我是否需要将self 作为方法的参数?
def build_shift_dict(self, shift):
import string
low = string.ascii_lowercase*2
up = string.ascii_uppercase*2
punc = list(" !@#$%^&*()-_+={}[]|\:;'<>?,./\"")
shift_dict = {}
for i in low[:26]:
shift_dict[i] = low[low.index(i) + shift]
for i in up[:26]:
shift_dict[i] = up[up.index(i) + shift]
for i in punc:
shift_dict[i] = i
return shift_dict
【问题讨论】:
-
是的,如果是实例方法,则需要
self参数,因为python会将其传入。是否应该是实例方法是另一个问题。 -
我会留给其他人来决定,但我认为 stackoverflow.com/questions/7554738/python-self-no-self-and-cls 和 stackoverflow.com/questions/37963018/… 可能是重复的
-
仍然不完全清楚为什么在不使用类实例的方法中需要“self”,但我想我需要将其视为给定并应用 @staticmethod 代替
-
@Mikki 因为实例将自动分配给函数的第一个参数。如果您省略
self并写def build_shift_dict(shift):,那么您将不会有班次,但实例将被称为shift。self这个词没有任何神奇的属性——重要的只是参数的数量。