自我 Python 类
self in Python classes
我知道 Python 方法中的第一个参数将是此 class 的一个实例。所以我们需要使用 "self" 作为方法中的第一个参数。但是我们是否也应该在以 "self." 开头的方法中指定属性(变量)?
即使我没有在他的属性中指定 self,我的方法仍然有效:
class Test:
def y(self, x):
c = x + 3
print(c)
t = Test()
t.y(2)
5
和
class Test:
def y(self, x):
self.c = x + 3
print(self.c)
t = Test()
t.y(2)
5
我需要在 "self.a" 之类的方法中指定一个属性,而不仅仅是 "a"?
在哪些情况下第一个示例不起作用但第二个示例可以?想看看他们两个之间真正不同的情况,因为现在从我的角度来看他们的行为是一样的。
您在 class 方法中执行 self.attribute_name 的原因是对该实例属性执行计算,而不是使用随机 variable.For 示例
class Car:
def __init__(self,size):
self.size = size
def can_accomodate(self,number_of_people):
return self.size> number_of_people
def change_size(self,new_size):
self.size=new_size
#works but bad practice
def can_accomodate_v2(self,size,number_of_people):
return size> number_of_people
c = Car(5)
print(c.can_accomodate(2))
print(c.can_accomodate_v2(4,2))
在上面的示例中,您可以看到 can_accomodate 使用的 self.size 而 can_accomodate_v2 传递的大小变量是错误的 practice.Both 将起作用,但 v2 是一个不好的做法,不应该 used.You 可以将参数传递给与 instance/class 无关的 class 方法,例如 can_accomodate 函数中的 "number_of_people"。
希望这可以帮助。
我知道 Python 方法中的第一个参数将是此 class 的一个实例。所以我们需要使用 "self" 作为方法中的第一个参数。但是我们是否也应该在以 "self." 开头的方法中指定属性(变量)?
即使我没有在他的属性中指定 self,我的方法仍然有效:
class Test:
def y(self, x):
c = x + 3
print(c)
t = Test()
t.y(2)
5
和
class Test:
def y(self, x):
self.c = x + 3
print(self.c)
t = Test()
t.y(2)
5
我需要在 "self.a" 之类的方法中指定一个属性,而不仅仅是 "a"?
在哪些情况下第一个示例不起作用但第二个示例可以?想看看他们两个之间真正不同的情况,因为现在从我的角度来看他们的行为是一样的。
您在 class 方法中执行 self.attribute_name 的原因是对该实例属性执行计算,而不是使用随机 variable.For 示例
class Car:
def __init__(self,size):
self.size = size
def can_accomodate(self,number_of_people):
return self.size> number_of_people
def change_size(self,new_size):
self.size=new_size
#works but bad practice
def can_accomodate_v2(self,size,number_of_people):
return size> number_of_people
c = Car(5)
print(c.can_accomodate(2))
print(c.can_accomodate_v2(4,2))
在上面的示例中,您可以看到 can_accomodate 使用的 self.size 而 can_accomodate_v2 传递的大小变量是错误的 practice.Both 将起作用,但 v2 是一个不好的做法,不应该 used.You 可以将参数传递给与 instance/class 无关的 class 方法,例如 can_accomodate 函数中的 "number_of_people"。 希望这可以帮助。