Python 类
1.类的创建
(1)使用class语句来创建一个新类,class之后为类的名称并以冒号结尾:
class <类名>: <语句>
以下是一个简单的实例:
#!/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)创建实例对象
"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
(3)访问属性
emp1.displayEmployee()
emp2.displayEmployee()
print('Total Employee %d' % Employee.empCount)
2.类的方法
在一个类中,可能出现三种方法。普通方法,静态方法和类方法。、
(1)普通方法第一个参数必须是 self.普通方法只能通过类创建的对象调用,这时 self就代表这个对象本身,通过self可以直接访问对象的属性。
#!/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。静态方法可以通过类名访问,也可以通过实例对象访问。
#!/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
#!/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)单继承
class <类名>(父类名) <语句>
如以下实例:
#!/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)类的多继承
class 类名(父类1,父类2,....,父类n)
<语句1>
需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法
#!/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.

浙公网安备 33010602011771号