首页 > 编程知识 正文

Python中的self机制

时间:2023-11-19 09:45:40 阅读:299550 作者:JBWJ

在Python编程语言中,self是一个特殊的关键字,用于表示对象本身。它起到指示方法与实例之间的关联的作用。

一、self机制的概述

1、self的作用

在Python中,self被用作方法的第一个参数,用于表示对象本身。通过self,我们可以在方法内部访问对象的属性和方法。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def greet(self):
        print('Hello, my name is', self.name, 'and I am', self.age, 'years old.')
        
p = Person('John', 25)
p.greet()

输出结果:Hello, my name is John and I am 25 years old.

2、self关键字的命名可以是任意的

尽管self是约定俗成的命名,但实际上你可以使用任意名称来表示对象本身,但是为了遵循编程习惯,我们强烈建议使用self。

class Person:
    def __init__(obj, name, age):
        obj.name = name
        obj.age = age
        
    def greet(obj):
        print('Hello, my name is', obj.name, 'and I am', obj.age, 'years old.')
        
p = Person('John', 25)
p.greet()

输出结果:Hello, my name is John and I am 25 years old.

二、self与类方法和静态方法

1、类方法

类方法是绑定到类而不是实例的方法。在类方法内部,我们无法直接访问实例属性,因此需要使用@classmethod装饰器,并将cls作为第一个参数传递给方法。

class Person:
    count = 0
    
    def __init__(self, name):
        self.name = name
        Person.count += 1
        
    @classmethod
    def get_count(cls):
        return cls.count
        
p1 = Person('John')
p2 = Person('Alice')

print(Person.get_count())

输出结果:2

2、静态方法

静态方法是类中独立于实例的方法,通过@staticmethod装饰器来定义。静态方法不能访问类的属性和实例的属性,也没有self或cls作为参数。

class MathUtils:
    @staticmethod
    def add(x, y):
        return x + y
        
print(MathUtils.add(5, 3))

输出结果:8

三、self与继承

1、子类调用父类方法

在子类中,可以通过super()函数来调用父类的方法,并使用self来传递子类实例。

class Animal:
    def __init__(self, name):
        self.name = name
        
    def speak(self):
        print('Animal speaks')
        
class Dog(Animal):
    def __init__(self, name):
        super().__init__(name)
        
    def speak(self):
        super().speak()
        print('Dog barks')
        
d = Dog('Buddy')
d.speak()

输出结果:

Animal speaks

Dog barks

2、子类调用父类属性

子类可以使用父类的属性,但是需要通过self来访问。

class Person:
    def __init__(self, name):
        self.name = name
        
class Employee(Person):
    def __init__(self, name, id):
        super().__init__(name)
        self.id = id
        
e = Employee('John', 12345)
print(e.name)
print(e.id)

输出结果:

John

12345

四、总结

在Python中,self是一个特殊的关键字,用于表示对象本身。通过self,我们可以在方法内部访问对象的属性和方法。self机制在面向对象编程中起着非常重要的作用,它使得代码更加清晰、易于理解和维护。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。