在 Python 中使用 self
Use of self in Python
前几天我在 Python3 中尝试一些简单的练习,由于我在 Python 中还很陌生,所以我对 self
的概念有些怀疑。
下面是 HackerRank 的 30 天代码挑战中的练习。
根据输入的值,我必须评估一个人的年龄打印出不同的输出:
输入(标准输入)
4
-1
10
16
18
代码
class Person:
def __init__(self,initialAge):
# Add some more code to run some checks on initialAge
if initialAge < 0:
self.age = 0
print("Age is not valid, setting age to 0.")
else:
self.age = initialAge
def amIOld(self):
# Do some computations in here and print out the correct statement to the console
if age < 13:
print("You are young.")
elif age >= 13 and age < 18:
print("You are a teenager.")
elif age >= 18:
print("You are old.")
def yearPasses(self):
# Increment the age of the person in here
global age
age += 1
然后
t = int(input())
for i in range(0, t):
age = int(input())
p = Person(age)
p.amIOld()
for j in range(0, 3):
p.yearPasses()
p.amIOld()
print("")
我想知道的是为什么在 def amIOld(self)
部分,下面的代码(使用 self.age
而不是 age
)不起作用:
def amIOld(self):
# Do some computations in here and print out the correct statement to the console
if self.age < 13:
print("You are young.")
elif self.age >= 13 and self.age < 18:
print("You are a teenager.")
elif self.age >= 18:
print("You are old.")
谁能帮我解释一下区别?
谢谢!
因为行
elif selfage >= 13 and self.age < 18:
您输入有误;那应该是 self.age
那边,访问 class.
的 age
属性
在 OOP 中使用 self 属性非常重要,因为它是访问和考虑对象属性的指南。与您应该制作 yearPasses
方法的方式相同:
def yearPasses(self):
self.age += 1 # increment the self attribute of age
而不是递增名为 age
的任意外部全局变量。
用人类的话说——你不只是增加一个age
;你增加了这个人的年龄,以后你会把这个年龄用于其他目的。
如果我们查看您的代码,self 用于表示 class object.For 示例。
Person 是 class(class Person:) 我们可以提及任何名称作为 class 的对象,例如:
class Person:
def __init__(self,initialAge):
#your code
person=Person(10) #or
per=Person(20) #or
per1=Person(5) #in your code class object has only one parameter rather than object(self).
如果你想调用一个函数,你应该这样调用:
person.amIOld() #or
per.amIOld() #here per is an object where we kept self as parameter in that function.
但是你必须记住的一件事是 self 应该是任何函数中的第一个参数,因为编译器认为函数中的第一个参数是对象(self)的表示。
如果您想进一步说明,请给我发消息 shivashanker.chagamreddy@gmail.com。
前几天我在 Python3 中尝试一些简单的练习,由于我在 Python 中还很陌生,所以我对 self
的概念有些怀疑。
下面是 HackerRank 的 30 天代码挑战中的练习。 根据输入的值,我必须评估一个人的年龄打印出不同的输出:
输入(标准输入)
4
-1
10
16
18
代码
class Person:
def __init__(self,initialAge):
# Add some more code to run some checks on initialAge
if initialAge < 0:
self.age = 0
print("Age is not valid, setting age to 0.")
else:
self.age = initialAge
def amIOld(self):
# Do some computations in here and print out the correct statement to the console
if age < 13:
print("You are young.")
elif age >= 13 and age < 18:
print("You are a teenager.")
elif age >= 18:
print("You are old.")
def yearPasses(self):
# Increment the age of the person in here
global age
age += 1
然后
t = int(input())
for i in range(0, t):
age = int(input())
p = Person(age)
p.amIOld()
for j in range(0, 3):
p.yearPasses()
p.amIOld()
print("")
我想知道的是为什么在 def amIOld(self)
部分,下面的代码(使用 self.age
而不是 age
)不起作用:
def amIOld(self):
# Do some computations in here and print out the correct statement to the console
if self.age < 13:
print("You are young.")
elif self.age >= 13 and self.age < 18:
print("You are a teenager.")
elif self.age >= 18:
print("You are old.")
谁能帮我解释一下区别?
谢谢!
因为行
elif selfage >= 13 and self.age < 18:
您输入有误;那应该是 self.age
那边,访问 class.
age
属性
在 OOP 中使用 self 属性非常重要,因为它是访问和考虑对象属性的指南。与您应该制作 yearPasses
方法的方式相同:
def yearPasses(self):
self.age += 1 # increment the self attribute of age
而不是递增名为 age
的任意外部全局变量。
用人类的话说——你不只是增加一个age
;你增加了这个人的年龄,以后你会把这个年龄用于其他目的。
self 用于表示 class object.For 示例。
Person 是 class(class Person:) 我们可以提及任何名称作为 class 的对象,例如:
class Person:
def __init__(self,initialAge):
#your code
person=Person(10) #or
per=Person(20) #or
per1=Person(5) #in your code class object has only one parameter rather than object(self).
如果你想调用一个函数,你应该这样调用:
person.amIOld() #or
per.amIOld() #here per is an object where we kept self as parameter in that function.
但是你必须记住的一件事是 self 应该是任何函数中的第一个参数,因为编译器认为函数中的第一个参数是对象(self)的表示。