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__()方法即可。



望有所帮助,望采纳!!