您的位置:首页 > 编程语言 > Python开发

Python学习笔记--类和对象

2016-03-18 17:30 585 查看
Python是解释性语言,但是它是面向对象的,能够进行对象编程

我们通过描述属性(特征)和行为来描述一个对象的。比如家里的小狗,它的颜色,大小,年龄,体重等是它的属性或特征。它会汪汪叫,会摇尾巴等是它的行为。

我们在描述一个真实对象(物体)时包括两个方面:

它可以做什么(行为)

它是什么样的(属性或特征)。

在python中,一个对象的特征也称为属性(attribute)。它所具有的行为也称为方法(method)

结论:对象=属性+方法

定义一个类

类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义:

class className:
block


注意类名后面有个冒号,在block块里面就可以定义属性和方法了。当一个类定义完之后,就产生了一个类对象。类对象支持两种操作:引用和实例化。引用操作是通过类对象去调用类中的属性或者方法,而实例化是产生出一个类对象的实例,称作实例对象。比如定义了一个people类:

class people:
name = 'jack'       #定义了一个静态属性
#定义了一个方法
def printName(self):
print self.name


在类中我们可以定义一些静态属性,比如年龄:

class people:
name = 'jack'
age = 12

p = people()     #创建p实例
print p.name,p.age
输出:jack  12
对象可以直接访问静态字段


定义了一个people类,里面定义了name和age属性,默认值分别为’jack’和12。在定义了类之后,就可以用来产生实例化对象了,这句p = people( )实例化了一个对象p,然后就可以通过p来读取属性了。这里的name和age都是公有的,可以直接在类外通过对象名访问,如果想定义成私有的,则需在前面加2个下划线 ’ __’。

在类中定义一些私有属性:

class people:
__name = 'jack'
__age = 12

p = people()     #创建p实例
print p.name,p.age

输出:报错


程序会报错,提示找不到这个属性,因为这是私有属性外面无法访问到,那么怎么访问这些私有属性呢,答案是方法。

class people:
__name = 'jack'
__age = 12

def getname(self):
return self.__name
def getname(self):
return self.__age

p = people()     #创建p实例
p.getName(),p.getAge()

输出:jack  12


类中的方法创建时必须有一个参数,一般定义为self也可以是其他,那么是不是可以定义其他参数呢?答案是可以的,例如:

#创建一个省份的类
class province:
def __init__(self,name,capital,leader)
self.Name = name
self.Capital = capital
self.Leader = leader
#实例化一个省份
ah = province('安徽','合肥','飞飞')
print ah.Name
输出:安徽


私有方法通过动态方法访问

#创建一个省份的类
class province:
def __init__(self,name,capital,leader)
self.Name = name
self.Capital = capital
self.Leader = leader
#定义一个私有方法
def __siyou(self):
print '私有方法'
#动态方法访问私有方法
@property
def get(self):
self.__siyou()

#实例化一个省份
ah = province('安徽','合肥','飞飞')
ah.get()
输出:私有方法


还有一个静态方法

#创建一个省份的类
class province:
def __init__(self,name,capital,leader)
self.Name = name
self.Capital = capital
self.Leader = leader
#定义一个静态方法
@staticmethod
def foo():
print '静态方法'

#实例化一个省份
ah = province('安徽','合肥','飞飞')
ah.foo()

输出:静态方法


call方法

class foo:
def __init__(self):
pass

def __del__(self):
print '析构方法'

def __call__(self):
print 'call方法'

f1 = foo()
f1()  #调用call方法
1、创建一个对象后,直接使用对象加括号的话则是访问类的call函数
2、del析构函数永远是最后一个执行的


类的继承

class father:
def __init__(self):
self.Fname = 'fff'

def func(self):
print 'father func'

def bad(self):
print 'bad'

#son子类基础父类father
class son(father):
def __init__(self):
self.Sname = 'sss'

def bar(self):
print 'son.bar'

#继承父类里面的方法并修改
def bad(self):
print 'good'

s1 = son()   #实例化类
s1.bar()     #调用子类的方法
s1.func()   #对象调用父类的方法

封装父类的方法
class father:
def __init__(self):
self.Fname = 'fff'

def bad(self):
print 'bad'

#son子类基础父类father
class son(father):
def __init__(self):
self.Sname = 'sss'

#继承父类里面的方法并修改
def bad(self):
father.bad(self)
print 'good'

s1 = son()   #实例化类

显示的调用父类构造函数
class father():
def __init__(self):
self.Fname = 'fff'
print 'father.__init__'

#son子类基础父类father
class son(father):
def __init__(self):
self.Sname = 'sss'
print 'son.__init__'
#显示调用父类构造函数
fathe.__init__(self)

s1 = son()   #实例化类


新式类

class father(object):
def __init__(self):
self.Fname = 'fff'
print 'father.__init__'

#son子类基础父类father
class son(father):
def __init__(self):
self.Sname = 'sss'
print 'son.__init__'
#显示调用父类构造函数
super(son,self).__init__()

s1 = son()   #实例化类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python