Python3 的类的使用
和其它语言一样,Class 是 Python3 中语法最复杂的类型。
类的定义称为 Class,类的实例称为 Instance。
Python3 的内置函数 isinstance() 和 issubclass() 分别用来检查对象与类的关系、类的继承关系(对象所属的类记录在 __class__
属性中)。
类的定义
__init__
方法相当于构造函数,
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
类的实例化:
x = MyClass(3.0, -4.5)
类属性
直接在类中定义的属性属于类变量:
class Dog:
kind = 'canine' # class variable shared by all instances
def __init__(self, name):
self.name = name # instance variable unique to each instance
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.kind # shared by all dogs
'canine'
>>> e.kind # shared by all dogs
'canine'
>>> d.name # unique to d
'Fido'
>>> e.name # unique to e
'Buddy'
类的继承
Python3 中的类支持多重继承:
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
在子类中,用 super() 方法调用父类的属性:
class C(B):
def __init__(self,url):
super().__init__(url)
def method(self, arg):
super().method(arg) # This does the same thing as:
# super(C, self).method(arg)
Python’s super() considered super! 对 super 有更多介绍。
迭代器
类的迭代器行为在 __iter__
和 __next__
中定义,__iter__
返回带有 __next__
的迭代器对象,__next__
返回下一个对象:
class Reverse:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]