在 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。