CodeGym /Java 课程 /Python SELF ZH /创建类和对象

创建类和对象

Python SELF ZH
第 15 级 , 课程 3
可用

3.1 创建类

在Python中创建类是面向对象编程(OOP)的重要部分。类允许创建新的数据类型, 这些数据类型可以具有自己的属性和方法。让我们看看Python中创建类的基本概念和示例。

基本概念

  • : 创建对象的模板。类定义将由该类对象拥有的属性和方法。
  • 对象: 类的实例。对象具有类中定义的所有属性和方法。
  • 属性: 与类或对象关联的变量。
  • 方法: 与类或对象关联的函数。

属性 本质上是对象或类的内部变量。方法 是在类中定义的函数。 这些术语来自OOP,并与函数和变量一起使用。

要声明(创建)新类,可以使用关键字class。 通常的语法如下:


class ClassName:
    variable1 = value1
    variableN = valueN
          
    def method1(self):
        function code
            
    def methodM(self):
        function code

基本上,可以说类是一个小程序(变量+函数),放在一个命名的空间中 — ClassName。

创建类之后,可以创建该类的对象(实例)。这段代码看起来更加简单:


variableX = ClassName()

重要! 在Python中通常使用小写字母来编写变量和方法名。类名则使用大写字母。 此外,类名中不使用下划线。如果类名由多个单词组成,则每个单词的首字母都大写。

如果想要访问类/对象的变量,代码通常如下:


variableX.variable1 = 10
variableX.methodM()       

但这里有一些细节,我们稍后再说…

3.2 使用对象

类和类的实例(类的对象)都是对象,因此两者都可以拥有自己的变量和方法。

存在两种类型的变量:

  • 类的属性/变量/字段 (class property)
  • 对象的属性/变量/字段 (object property)

而且有整整三种类型的方法:

  • 类的方法/函数 (class method)
  • 对象的方法/函数 (instance method)
  • 静态方法 (static method)

这些方法的不同之处在于它们的声明方式和调用方式。

对象的方法

在声明对象的方法时,需要传递第一个必填参数 — self。在调用方法时, 这个参数传递对象的引用 instance


class MyClass:

    def instance_method(self):
        print(type(self))  # <class 'MyClass'>
                   

my_object = MyClass()
my_object.instance_method()
        

在上面的示例中,当开始执行instance_method()时, 参数self被传递了对象my_object的引用。

类的方法

在声明类的方法时,也需要传递第一个必填参数 — cls。 在调用方法时,这个参数传递类的引用 (class object)。 此外,需要用classmethod装饰器标记类的方法,如下例所示:


class MyClass:
    def instance_method(self):
        print(type(self))  # <class 'MyClass'>
        
    @classmethod
    def class_method(cls):
        print(type(cls))  # <class 'type'>
                   

my_object = MyClass()
my_object.instance_method()
MyClass.class_method()
        

在上面的示例中,当开始执行class_method()时, 参数cls被传递了类MyClass的引用。

静态方法

在声明静态方法时,不需要传递任何东西,但它也不能访问类的内部数据。 此外,需要用staticmethod装饰器标记静态方法,如下例所示:


class MyClass:
    def instance_method(self):
        print(type(self))  # <class 'MyClass'>
        
    @classmethod
    def class_method(cls):
        print(type(cls))  # <class 'type'>
        
    @staticmethod
    def static_method():
        return "这个方法不依赖于实例或类"
                   
my_object = MyClass()
my_object.instance_method()
MyClass.class_method()
MyClass.static_method() 
        

静态方法的调用非常类似于类的方法,但没有对象引用或类引用传递给它。

3.3 类变量

类变量

为了声明一个类的变量(属性),只需在类的任意地方声明它即可。 通常在方法声明之前进行。示例:


class MyClass:
    attribute = "我是类的属性"
        
    @classmethod
    def class_method(cls):
        print(cls.attribute)  # 我是类的属性
                  
my_object = MyClass()
MyClass.class_method()

如果你想读取或写入类变量的值,请使用对象cls

通常,可以通过类名访问类变量:


class MyClass:
    attribute = "我是类的属性"
        
    @classmethod
    def class_method(cls):
        print(MyClass.attribute)  # 我是类的属性
                  
my_object = MyClass()

print(MyClass.attribute)  # 我是类的属性

对象的变量/字段

对象的变量(instance)是对象self的字段。你只需通过self.name访问它们。 这就是为什么对象self被传递给每个对象方法的原因。

示例:


class MyClass:
    attribute = "我是类的属性"
        
    def set_name(self, name):
        self.name = name
        
    def print_name(self):
        print(self.name)    
                 
my_object = MyClass()
my_object.set_name("对象字段名为name") 
my_object.print_name()  # "对象字段名为name"
        

每次调用对象的方法时,第一个参数(self)传递的是你调用方法的对象的引用。 不同的对象方法可以通过使用对象self访问共享数据。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION