GoodZhang在学Python(十)--类和对象

来源:互联网 发布:win32系统编程 pdf 编辑:程序博客网 时间:2024/06/08 10:50

python是面向对象的,好,接下来,就写一下学习类和对象的东西

基本类

首先,来看一个最基本的person类吧

__author__ = 'zWX231671'class Person:    # pass表示空白语句块    passp = Person()print(p)

方法

有类就要有方法,也是通过下面的例子来了解一下:

__author__ = 'zWX231671'class Person:    name = 'tom'    def hi(self):        # self引用自身的对象        # self类似 C++中的self指针和java、C#中的this参考        print('hi %s' % self.name)p = Person()p.hi()
结果为:

hi tom

__init__方法

在java语言中类都会有构造方法,在python中也是有类似的方法 __init__ (注意是两个下划线)

__author__ = 'zWX231671'class Person:    # 无需为self赋值    def __init__(self, name, age):        self.name = name        self.age = age    def hi(self):        print('%s is a good boy, %d years old' % (self.name, self.age))p = Person('tom', 13)p.hi()
结果为:

tom is a good boy, 13 years old


类的变量和对象的变量

类的变量,由一个类的所有对象所共同拥有,在内存中只有一份拷贝,在一个对象中改变其值,会立即反映到其他对象中

对象的变量,由类的每个对象所拥有,每个对象都拥有这个变量的一份拷贝,他们在不同对象中虽然名字相同,但是内在的没有半毛钱关系

例子:

__author__ = 'zWX231671'class Person:    age = 0    def __init__(self, name):        Person.age += 1        self.name = name        print('excute __init__:my name is %s, %d years old' % (self.name, self.age))    # 在对象销毁(不再使用)时调用 __del__方法    def __del__(self):        Person.age -= 1        print('excute __del__:my name is %s, %d years old' % (self.name, self.age))    def hi(self):        print('my name is %s, %d years old' % (self.name, self.age))tom = Person('tom')tom.hi()cat = Person('cat')cat.hi()jerry = Person('jerry')jerry.hi()del tom

结果为:

excute __init__:my name is tom, 1 years oldmy name is tom, 1 years oldexcute __init__:my name is cat, 2 years oldmy name is cat, 2 years oldexcute __init__:my name is jerry, 3 years oldmy name is jerry, 3 years oldexcute __del__:my name is tom, 2 years oldexcute __del__:my name is jerry, 1 years oldexcute __del__:my name is cat, 0 years old

继承

应该对继承的思想都有理解了,这里就不多说,举个例子,再简单分析一下:

__author__ = 'zWX231671'class Animal:    def __init__(self, legNum, wingNum):        self.legNum = legNum        self.wingNum = wingNum    def say(self):        print('I have %d legs and %d wings' % (self.legNum, self.wingNum))class Dog(Animal):    def __init__(self, legNum, wingNum, sound):        Animal.__init__(self, legNum, wingNum)        self.sound = sound    def say(self):        Animal.say(self)        print('I am a dog,my sound is %s' % self.sound)    def run(self):        print('I am a dog,I can run with my legs')class Brid(Animal):    def __init__(self, legNum, wingNum, sound):        Animal.__init__(self, legNum, wingNum)        self.sound = sound    def say(self):        Animal.say(self)        print('I am a brid,my sound is %s' % self.sound)    def fly(self):        print('I am a brid,I can fly with my wings')dog = Dog(4, 0, '汪汪')brid = Brid(2, 2, '叽叽喳喳')dog.say()dog.run()brid.say()brid.fly()
结果:

I have 4 legs and 0 wingsI am a dog,my sound is 汪汪I am a dog,I can run with my legsI have 2 legs and 2 wingsI am a brid,my sound is 叽叽喳喳I am a brid,I can fly with my wings
Animal、Dog、Brid三个类,Dog与Brid继承自Animal父类,继承并覆盖了say()方法,同时Dog有自己的run()方法,Brid加了自己的fly()方法



0 0
原创粉丝点击