2.2Python类型之类(Class)

1.类声明

class 类名:
    #类体

2.类名

类名是第一次跟类定义绑定的类名。

class C:
    pass

print(C.__name__)  # C

类声明是 type 类的实例,类名就是存储这个实例的变量,因此在赋值后可以通过重新赋值更改其值。

class C:
    def f(self):
        return 1

print(C().f())  # 1
C = 2
print(C().f())  # 报错
print(C)        # 2

3.类引用表达式

类名

4.类定义作为值

4.1作为值赋给变量

class C:
    def f(self):
        return 1

print(C().f())  # 1
B = C
print(B().f())  # 1

4.2作为函数的实参或返回值

#作为实参
def call_some_class(some_class):
    return some_class().f()

class C:
    def f(self):
        return 1

print(call_some_class(C))  # 1
#作为返回值
def return_some_class():
    class C:
        def f(self):
            return 1
    return C   

C2 = return_some_class()
print(C2().f())  # 1

5.访问成员

类名.类变量名
类名.类方法名()
类名.静态方法名()
对象名.实例变量名
对象名.实例访问器属性名
对象名.实例方法名()
类名().实例变量名
类名().实例访问器属性名
类名().实例方法名()

6.访问器属性(Accessor Property)

注意:Python 语言不支持类访问器属性。

注意:getter 的定义代码必须在 setter 的定义代码前面,否则会报错。

class ClassWithGetSet:

    #实例getter
    @property
    def instance_method(self):
        #访问器属性体

    #实例setter
    @instance_method.setter
    def instance_method(self, 形参):
        #访问器属性体

7.构造函数

一个类非必须有构造函数。如果一个类没有构造函数,相当于定义了一个函数体为空的构造函数。如果一个类有多个构造函数,后定义的构造函数会覆盖先定义的构造函数。

class 类名:
    def __init__(self):
        #构造函数体

8.继承

一个子类可以直接继承自多个父类,但如果多个父类存在同名成员时,左边的父类的同名成员的优先级高于右边的父类的同名成员。

子类会直接继承父类中可继承的成员,间接继承祖父类中可继承的成员,以此类推,直至没有可继承的成员。

继承支持类变量、类方法、静态方法、实例变量、实例访问器属性、实例方法、构造函数。

注意:从父类中继承过来的成员无需在子类中重新声明,否则会发生覆盖。

class 子类名(父类名1, 父类名2, 父类名N):
    #子类体

9.覆盖(Override)

如果从父类中继承过来的成员在子类中重新声明,此时相当于在子类中同时声明了两个相同名称的成员,则在子类中重新声明的成员会覆盖从父类中继承过来的成员。

注意:只需要成员名称相同,就会发生覆盖。

注意:关于支持覆盖的成员,参考继承章节。

注意:覆盖并不会影响父类中原来的成员。

class A:
    def f(self):
        return 1

class B(A):
    def f(self):
        return 2

print(B().f())  # 2

10.抽象类

Python 语言不支持抽象类。

11.创建对象

#无实参
对象名 = 类名()

#有实参
对象名 = 类名(实参)

12.cls关键字

cls 关键字指向当前类。

13.self关键字

self 关键字指向当前对象。

14.super()函数

super() 函数用于在子类中调用父类的成员。

支持的成员:类方法、实例访问器属性、实例方法、构造函数,不支持类变量、静态方法、实例变量。

super().类方法()
super().实例访问器属性
super().实例方法()
super().__init__()

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/python/pythonlang/35573.html

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2025年2月1日 22:10
下一篇 2025年2月2日 16:50

相关推荐

  • 1.5Python语言的变量(Variable)

    1.变量声明 变量在赋值后可以通过重新赋值更改其值。 注意:新的值的类型不一定与老的值的类型相同。 2.变量作用域 2.1全局变量 名称 修饰符 全局变量 —————— 2.2成员变量 名称 修饰符 类变量 —————— 实例变量 self. 2.3局部变量 名称 修饰符 局部变量 —————— 3.变量引用表达式 4…

    Python语言教程 2025年1月5日
    0810
  • 2.6Python类型之字典(Dictionary)

    字典的键必须是不可变类型。 字典的键不可以重复,后定义的键值对会覆盖先定义的键值对。 字典的值可以是任何 Python 数据类型,且不必都是同一个类型。 字典的值可以重复。 字典的键值对是无序的,但迭代时是有序的。 字典的键值对的个数(长度)可以动态改变,可以添加、更改、删除键值对。 1.字典声明 2.访问字典 3.字…

    Python语言教程 2025年2月6日
    01190
  • 1.7Python语言的函数(Function)

    1.函数声明 注意:在同一个作用域,可以重新声明同名函数,后定义的函数声明会覆盖先定义的函数声明。 2.lambda函数表达式 3.函数作用域 3.1全局函数 名称 修饰符 全局函数 —————— 3.2成员方法 注意:Python 语言不支持类访问器属性和静态访问器属性。 名称 修饰符 类方法 @classmetho…

    Python语言教程 2025年1月7日
    0860

发表回复

登录后才能评论