📜  Python中的类或静态变量(1)

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

Python中的类或静态变量

Python是一种面向对象的编程语言,即使不去使用面向对象的特性,也会经常使用类或静态变量来组织代码。

在Python中,使用class关键字来定义类。类可以看作是一种自定义类型,类中可以定义属性和方法。

定义类

定义类需要给类指定一个名称,这个名称一般采用驼峰命名法。类的定义通常包含一个__init__方法,这个方法会在创建对象时被调用,用于初始化对象的属性。

class MyClass:
    def __init__(self, name):
        self.name = name
    
    def say_hello(self):
        print(f'Hello, {self.name}!')

这个类定义了一个MyClass类,这个类有一个__init__方法和一个say_hello方法。__init__方法有一个name参数,这个参数用于初始化对象的name属性。say_hello方法会在对象上调用,用于输出一条问候消息。

创建对象

创建类的对象需要使用类名和括号。如果类的__init__方法需要参数,那么在创建对象时需要传递这些参数。

my_object = MyClass('John')
my_object.say_hello()  # 输出 "Hello, John!"
继承

Python中的类可以继承其他类。被继承的类称为父类,继承这个类的类称为子类。子类会继承父类的属性和方法,并可以添加自己的属性和方法。

class Shape:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def area(self):
        raise NotImplementedError('area() is not implemented in Shape class')
    
    def perimeter(self):
        raise NotImplementedError('perimeter() is not implemented in Shape class')


class Rectangle(Shape):
    def __init__(self, x, y, width, height):
        super().__init__(x, y)
        self.width = width
        self.height = height
    
    def area(self):
        return self.width * self.height
    
    def perimeter(self):
        return 2 * (self.width + self.height)

这个例子定义了一个Shape类和一个Rectangle类。Shape类包含xy两个属性和一个未实现的area方法和perimeter方法。Rectangle类继承了Shape类,并添加了自己的widthheight两个属性以及area方法和perimeter方法。

类方法和静态方法

类方法和静态方法是类的两个特殊方法。类方法是在类上定义的方法,而静态方法是不与类或对象关联的方法。

类方法使用@classmethod装饰器来定义。类方法的第一个参数是cls,指向类本身。

class MyClass:
    attribute = 'Hello, world!'
    
    @classmethod
    def say_hello(cls):
        print(cls.attribute)

这个例子定义了一个MyClass类,这个类有一个attribute属性和一个say_hello方法。say_hello方法使用@classmethod装饰器来定义,这使得这个方法成为了类方法。类方法使用cls参数访问类的属性和方法。

静态方法使用@staticmethod装饰器来定义。静态方法不使用类或对象的任何属性或方法。

class MyClass:
    @staticmethod
    def say_hello():
        print('Hello, world!')

这个例子定义了一个MyClass类,这个类有一个say_hello方法。say_hello方法使用@staticmethod装饰器来定义,这使得这个方法成为了静态方法。静态方法不使用类或对象的任何属性或方法。

静态变量

静态变量是属于类而不是属于对象的变量。静态变量可以在类中定义,但不需要使用对象来使用它们。

class MyClass:
    static_attribute = 'Hello, world!'

这个例子定义了一个MyClass类,这个类有一个static_attribute属性。这个属性是静态变量,可以通过类名来访问。

print(MyClass.static_attribute)  # 输出 "Hello, world!"