python-面向对象-类的定义和实例化

python是一种面向对象编程语言,自然也有类的概念。python中的类通过class 关键字定义,提供了面向对象的所有标准特性,例如允许一个类继承多个基类, 子类可以覆盖父类的方法,封装,继承,多态 面向对象的三大特性,python一样不少。

1.类的定义

#coding=utf-8
class clazz:
    def __init__(self,names,age):
        self.names=names;
        self.age=age;
    def run(self):
        print "name:"+format(self.names),"ages:"+format(self.age);
print clazz.__name__;
s=clazz("xiaoxiao",35);
s.run();

#类名clazz,使用clazz的属性来访问它

print clazz.__name__;

在类里面,同样用def关键字来定义函数,但是我们管类里的函数叫方法。

2.类的初始化函数与实例属性

__init__是初始化函数,当实例被构造出来以后,使用__init__方法来初始化实例属性。

name 和 age都是实例的属性,属性就是数据。说了半天实例,到底谁是实例,在类的方法里,self就是实例,如果你有其他编程语言的经验,python中的self等同于其他编程语言里的this。

3.实例化

类是一种封装技术,我们把数据和方法都封装到了类里,如果你想使用数据和方法,那么你需要用类创建出一个实例来,这个过程就叫做实例化

s 就是创建出来的实例,s是类Stu的一个实例。在定义Stu的时候,要求实例必须有name和age属性,因此,在创建示例时,我们必须提供这些属性,按照__init__函数的参数列表传入'小明' 和 18。

s.run() 这行代码是在调用实例的run方法,不同于之前所学习的函数,类里的方法只能通过实例或者类来调用,调用的方式就如代码里演示的那样。

4.self是什么?

 你或许已经注意到,类里定义的每个方法都有一个self参数,它并不是默认参数,但这个参数在方法被调用时是不需要传参的,这与之前所学过函数内容相违背。

self是方法的一个参数,在方法调用时,这个参数是默认传参的。

class clazz:
    def __init__(self,names,age):
        print "__init__:",id(self);
        self.names=names;
        self.age=age;
    def run(self):
        print "run:",id(self);
        print "name:"+format(self.names),"ages:"+format(self.age);
print clazz.__name__;
s=clazz("xiaoxiao",35);
s.run();

运行结果:

clazz
__init__: 42401544
run: 42401544
name:xiaoxiao ages:35

self的内存地址,和s的内存地址是一致的,这可以证明,self就是s。函数被定义以后,在任何地方都可以调用,没有调用的主体,而类的方法,则需要一个调用主体,哪个实例调用了类的方法,self就会绑定为哪个实例,self这个参数就是哪个实例。

分析上面的输出结果,在__init__方法被调用时,s这个对象就已经被创建好了,这可以证明它不是构造方法,真正的构造方法是__new__,在没有调用构造方法前,对象是不存在的。

5.对象属性的访问

对象属性的访问与修改,只能通过对象来进行

#coding=utf-8
class clazz:
    def __init__(self,name,age):
        print("开始初始化...")
        self.name=name;
        self.age=age;
    def info(self):
        print "{name}今年{age}岁".format(name=self.name,age=self.age);
s=clazz("tom",12);
s.info();
s.age=33;
s.info();

运行结果:

开始初始化...
tom今年12岁
tom今年33岁

 

posted @ 2022-11-21 16:23  家乐福的搬砖日常  阅读(422)  评论(0编辑  收藏  举报