📜  python中的self关键字是什么(1)

📅  最后修改于: 2023-12-03 15:04:35.214000             🧑  作者: Mango

Python中的self关键字是什么

在Python中,self是一个常用的关键字,用于指代对象本身。当定义一个类时,如果类中定义了方法,需要访问对象的属性或调用对象的方法,就需要使用self关键字来表示当前对象的引用。本文将介绍Python中的self关键字用法。

self的作用

在Python中,每当创建一个对象时,都会自动在该对象中设置一个self属性,这个属性指向该对象本身。当调用该对象的方法时,需要使用self属性来引用对象本身。

例如,我们定义一个Person类,其中包含名字和年龄两个属性,以及一个speak方法,输出该人的名字和年龄:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def speak(self):
        print("My name is", self.name, "and I am", self.age, "years old.")

# 创建一个Person对象
p = Person("Alice", 25)

# 调用Person的speak方法
p.speak()

在上面的代码中,我们定义了一个Person类,其中__init__方法用于初始化对象,speak方法用于输出该人的名字和年龄。在speak方法中,我们使用了self.name和self.age来引用该对象的名字和年龄属性。

执行以上代码,输出结果如下:

My name is Alice and I am 25 years old.
self与类方法

在Python中,类方法是一种与类相关联的方法,可以不依赖于类实例而直接使用。与普通方法不同,类方法的第一个参数为类本身,通常被命名为cls。

在类中定义类方法时同样需要使用self关键字来引用对象本身。当然在这里的self并不表示对象本身,而是表示当前类本身。可以看下面的代码:

class Person:
    count = 0
    def __init__(self, name, age):
        self.name = name
        self.age = age
        Person.count += 1
    
    def speak(self):
        print("My name is", self.name, "and I am", self.age, "years old.")
    
    @classmethod
    def print_count(cls):
        print("There are", cls.count, "Person objects.")
        
# 创建两个Person对象
p1 = Person("Alice", 25)
p2 = Person("Bob", 30)

# 使用类方法输出已创建的Person对象数
Person.print_count()

在上面的代码中,我们定义了一个Person类,其中count属性用于记录已创建的Person对象数,并在每次创建新Person对象时将计数器加一。print_count方法是一个类方法,用于输出已创建的Person对象数,需要使用cls来引用类本身。

执行以上代码,输出结果如下:

There are 2 Person objects.
self与静态方法

在Python中,静态方法是一种与类无关的方法,不依赖于类或类实例,可以直接使用。在类中定义静态方法时同样需要使用self关键字来引用对象本身。当然在这里的self并不表示对象本身,而是表示当前类本身。可以看下面的代码:

class Person:
    @staticmethod
    def say_hello():
        print("Hello, world!")

# 直接调用静态方法
Person.say_hello()

在上面的代码中,我们定义了一个Person类,其中say_hello方法是一个静态方法,用于输出"Hello, world!"。需要使用self关键字来定义静态方法,在这里的self并不表示对象本身,而是表示当前类本身。

执行以上代码,输出结果如下:

Hello, world!
完整示例

下面的完整示例包括了上述三种情况,展示了self关键字的使用:

class Person:
    count = 0
    def __init__(self, name, age):
        self.name = name
        self.age = age
        Person.count += 1
    
    def speak(self):
        print("My name is", self.name, "and I am", self.age, "years old.")
    
    @classmethod
    def print_count(cls):
        print("There are", cls.count, "Person objects.")
    
    @staticmethod
    def say_hello():
        print("Hello, world!")
        
# 创建两个Person对象
p1 = Person("Alice", 25)
p2 = Person("Bob", 30)

# 调用Person的speak方法
p1.speak()
p2.speak()

# 使用类方法输出已创建的Person对象数
Person.print_count()

# 直接调用静态方法
Person.say_hello()

执行以上代码,输出结果如下:

My name is Alice and I am 25 years old.
My name is Bob and I am 30 years old.
There are 2 Person objects.
Hello, world!
总结

本文介绍了Python中self关键字的用法和作用,它的主要作用是引用对象本身,可以在类的方法中使用。在类方法和静态方法中同样需要使用self关键字来引用当前类本身,以便进行一些与类相关的操作。虽然self是Python中的一个常见关键字,但它在面向对象编程中扮演着重要的角色。