python是面向对象的,好,接下来,就写一下学习类和对象的东西
基本类
首先,来看一个最基本的person类吧
__author__ = 'zWX231671'
class Person:
# pass表示空白语句块
pass
p = 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 old
my name is tom, 1 years old
excute __init__:my name is cat, 2 years old
my name is cat, 2 years old
excute __init__:my name is jerry, 3 years old
my name is jerry, 3 years old
excute __del__:my name is tom, 2 years old
excute __del__:my name is jerry, 1 years old
excute __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 wings
I am a dog,my sound is 汪汪
I am a dog,I can run with my legs
I have 2 legs and 2 wings
I 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()方法