Python 类
1.类的创建
(1)使用class语句来创建一个新类,class之后为类的名称并以冒号结尾:
1 2 | class <类名>: <语句> |
以下是一个简单的实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/usr/bin/env python3 # -*- coding: UTF-8 -*- class Employee: '所有员工的基类' empCount = 0 def __init__( self , name, salary): self .name = name self .salary = salary Employee.empCount + = 1 def displayCount( self ): print ( 'Total Employee %s' % Employee.empCount) def displayEmployee( self ): print ( 'Name : ' , self .name, ', Salary: ' , self .salary) |
- empCount变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用Employee.empCount访问。
- 第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
(2)创建实例对象
1 2 3 4 | "创建 Employee 类的第一个对象" emp1 = Employee( "Zara" , 2000 ) "创建 Employee 类的第二个对象" emp2 = Employee( "Manni" , 5000 ) |
(3)访问属性
1 2 3 | emp1.displayEmployee() emp2.displayEmployee() print ( 'Total Employee %d' % Employee.empCount) |
2.类的方法
在一个类中,可能出现三种方法。普通方法,静态方法和类方法。、
(1)普通方法第一个参数必须是 self.普通方法只能通过类创建的对象调用,这时 self就代表这个对象本身,通过self可以直接访问对象的属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/usr/bin/env python3 # -*- coding: UTF-8 -*- class Student( object ): count = 0 books = [] def __init__( self , name, age): self .name = name self .age = age def printInstanceInfo( self ): print ( '%s is %d years old' % ( self .name, self .age)) wilber = Student( "Wilber" , 28 ) wilber.printInstanceInfo() |
(2)静态方法没有参数的限制,既不需要实例参数,也不需要类参数。定义的时候使用 @staticmethod。静态方法可以通过类名访问,也可以通过实例对象访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/usr/bin/env python3 # -*- coding: UTF-8 -*- class Student( object ): count = 0 books = 'python' def __init__( self , name, age): self .name = name self .age = age @staticmethod def printClassAttr(): print (Student.count) print (Student.books) pass Student.printClassAttr() wilber = Student( "Wilber" , 28 ) wilber.printClassAttr() |
(3)类方法以cls作为第一个参数,cls表示类本身,定义时使用@classmethod
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/usr/bin/env python3 # -*- coding: UTF-8 -*- class Student( object ): count = 0 books = 'python' def __init__( self , name, age): self .name = name self .age = age @classmethod def printClassInfo( cls ): print ( cls ) Student.printClassInfo() wilber = Student( "Wilber" , 28 ) wilber.printClassInfo() |
3.类的继承
(1)单继承
1 2 | class <类名>(父类名) <语句> |
如以下实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/usr/bin/env python3 # -*- coding: UTF-8 -*- class F1: def __init__( self ): self .name = 'yang' class F2(F1): pass obj = F2() print (obj.name) |
以上代码运行后会输出 yang。
(3)类的多继承
1 2 | class 类名(父类 1 ,父类 2 ,....,父类n) <语句 1 > |
需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/usr/bin/env python3 # -*- coding: UTF-8 -*- class F1: def __init__( self ): self .name = 'yang' class F2: def __init__( self ): self .name = 'zheng' class F3(F1,F2): pass obj = F3() print (obj.name) |
以上代码中,F3继承了F1和F2,在创建对象obj时,优先继承了F1中的__init__方法,因此输出 obj.name时显示的是 yang,如果将类F3的继承顺序改为 (F2,F1),输出的结果将会是 zheng.
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步