Python学习笔记--类和对象

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函数
2del析构函数永远是最后一个执行的

类的继承

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()   #实例化类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值