Python3.5 类和实例
望共同进步
转载请注明地址:
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
类的定义
类定义的语法格式如下(以Student类为例):
class Student(object):
pass
class + 空格 + 类名(即Student,类名通常是大写开头的单词),紧接的是(object),表示该类是从哪个类继承下来的,通常如果没有合适的类,就使用object类,这是所有类最终都会继承的类。
类对象:创建一个类之后,可以通过类名访问,改变其属性,方法
实例对象:类实例化后,可以使用其属性,可以动态的为实例对象添加属性而不影响类对象
定义好了Student类,就可以根据Student类创建出Student的实例,创建实例是通过类名+()实现的:
bart = Student()
print(bart)
#<__main__.Student object at 0x0398F830>
可以看到,变量bart指向的就是一个Student的实例,后面的0x10a67a590是内存地址,每个object的地址都不一样,而Student本身则是一个类。
可以自由地给一个实例变量绑定属性,比如,给实例bart绑定一个name属性:
bart.name = 'Michael'
print(bart.name)
#结果:Michael
由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去,然后我们就能够访问其属性了:
class Student(object):
def __init__(self):
self.name = 'Michael'
self.score = 95
bart = Student()
print(bart.name)
print(bart.score)
#结果:
Michael
95
这是没有设定参数的时候,其实一般我们在绑定属性的时候会设定参数:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
PS:特殊方法“__init__”前后分别有两个下划线!!!
注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
bart = Student('Bart Simpson', 59)
print(bart.name)
print(bart.score)
#结果:
Bart Simpson
59
和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。
类的属性
可以使用点(.)来访问对象的属性
也可以使用以下函数的方式来访问属性:
getattr(obj, name[, default]) : 访问对象的属性
hasattr(obj,name) : 检查是否存在一个属性
setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性
delattr(obj, name) : 删除属性
Python内置类属性
__dict__ : 类的属性(包含一个字典,由类的数据属性组成)
__doc__ :类的文档字符串
__name__: 类名
__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
__bases__ : 类的所有父类构成元素(包含了以个由所有父类组成的元组)
类的方法
在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数。
类的专有方法:
__init__ 构造函数,在生成对象时调用
__del__ 析构函数,释放对象时使用
__repr__ 打印,转换
__setitem__按照索引赋值
__getitem__按照索引获取值
__len__获得长度
__cmp__比较运算
__call__函数调用
__add__加运算
__sub__减运算
__mul__乘运算
__div__除运算
__mod__求余运算
__pow__称方
__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法,与c++中构造函数类似。只需在自定义的类中重写__init__()方法即可。
望有所帮助,望采纳!!