Python中类的定义与使用

来源:互联网 发布:tensorflow 图片识别 编辑:程序博客网 时间:2024/05/16 09:45
Python中类的定义与使用

 Part I

目标:

  1.类的定义

  2.父类,子类定义,以及子类调用父类

  3.类的组合使用

  4.内置功能

 

1.类的定义

#!/usr/bin/env python#coding:utf8class Hotel(object):    """docstring for Hotel"""    def __init__(self, room, cf=1.0, br=15):        self.room = room        self.cf = cf        self.br = br    def cacl_all(self, days=1):        return (self.room * self.cf + self.br) * daysif __name__ == '__main__':    stdroom = Hotel(200)    big_room = Hotel(230, 0.9)    print stdroom.cacl_all()    print stdroom.cacl_all(2)    print big_room.cacl_all()    print big_room.cacl_all(3)


 

2.父类、子类以及调用父类

#!/usr/bin/env python# -*- coding: utf-8 -*-# 父类class AddBook(object):    def __init__(self, name, phone):        self.name = name        self.phone = phone    def get_phone(self):        return self.phone# 子类,继承class EmplEmail(AddBook):    def __init__(self, nm, ph, email):        # AddBook.__init__(self, nm, ph) # 调用父类方法一        super(EmplEmail, self).__init__(nm, ph) # 调用父类方法二        self.email = email    def get_email(self):        return self.email# 调用if __name__ == "__main__":    Detian = AddBook('handetian', '18210413001')    Meng = AddBook('shaomeng', '18210413002')    print Detian.get_phone()    print AddBook.get_phone(Meng)    alice = EmplEmail('alice', '18210418888', 'alice@xkops.com')    print alice.get_email(), alice.get_phone()


3.类的组合使用

#!/usr/bin/env python# -*- coding: utf-8 -*-'''1.class类的组合使用2.手机、邮箱、QQ等是可以变化的(定义在一起),姓名不可变(单独定义)。3.在另一个类中引用'''class Info(object):    def __init__(self, phone, email, qq):        self.phone = phone        self.email = email        self.qq = qq    def get_phone(self):        return self.phone    def update_phone(self, newphone):        self.phone = newphone        print "手机号更改已更改"    def get_email(self):        return self.emailclass AddrBook(object):    '''docstring for AddBook'''    def __init__(self, name, phone, email, qq):        self.name = name        self.info = Info(phone, email, qq)if __name__ == "__main__":    Detian = AddrBook('handetian', '18210413001', 'detian@xkops.com', '123456')    print Detian.info.get_phone()    Detian.info.update_phone(18210413002)    print Detian.info.get_phone()    print Detian.info.get_email()


 

4.内置功能(函数()加与不加的区别)

#!/usr/bin/env python#coding:utf8class Books(object):    def __init__(self, title, author):        self.title = title        self.author = author    def __str__(self):        return self.title    def __repr__(self):        return self.title    def __call__(self):        print "%s is written by %s" %(self.title, self.author)if __name__ == '__main__':    pybook = Books('Core Python', 'Wesley')    print pybook    pybook()


----------------------------------------------------------------------------------------------------------------------------------------------------------------

#!/usr/bin/env python#coding:utf8class  Number(object):    """Custum object    add/radd -> +;     sub/rsub -> -;    mul/rmul -> *;    div/rdiv -> /;    """    def __init__(self, number):        self.number = number    def __add__(self, other):        return self.number + other            def __radd__(self, other):        return self.number  + other    def __sub__(self, other):        return self.number - other    def __rsub__(self, other):        return other - self.number    def __gt__(self, other):        if self.number > other:            return True        return Falseif __name__ == '__main__':    num = Number(10)    print num + 20    print 30 + num    print num - 5    print 11 - num    print num > 20



Part II


一、类定义:


class <类名>: <语句>



类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象

类的私有属性:
  __private_attrs  两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs
类的方法
  在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数
私有的类方法
  __private_method 两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用slef.__private_methods

类的专有方法:
__init__  构造函数,在生成对象时调用
__del__   析构函数,释放对象时使用
__repr__ 打印,转换
__setitem__按照索引赋值
__getitem__按照索引获取值
__len__获得长度
__cmp__比较运算
__call__函数调用

__add__加运算
__sub__减运算
__mul__乘运算
__div__除运算
__mod__求余运算
__pow__称方
#类定义     class people:         #定义基本属性         name = ''         age = 0         #定义私有属性,私有属性在类外部无法直接进行访问         __weight = 0         #定义构造方法         def __init__(self,n,a,w):             self.name = n             self.age = a             self.__weight = w         def speak(self):             print("%s is speaking: I am %d years old" %(self.name,self.age))          p = people('tom',10,30)     p.speak()



二、继承类定义:
1.单继承


class <类名>(父类名)   <语句>



class childbook(book)    age = 10



#单继承示例     class student(people):         grade = ''         def __init__(self,n,a,w,g):             #调用父类的构函             people.__init__(self,n,a,w)             self.grade = g         #覆写父类的方法         def speak(self):             print("%s is speaking: I am %d years old,and I am in grade %d"%(self.name,self.age,self.grade))          s = student('ken',20,60,3)     s.speak()



2.类的多重继承

class 类名(父类1,父类2,....,父类n)     <语句1>

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法
复制代码 代码如下:

#另一个类,多重继承之前的准备 class speaker():     topic = ''     name = ''     def __init__(self,n,t):         self.name = n         self.topic = t     def speak(self):         print("I am %s,I am a speaker!My topic is %s"%(self.name,self.topic)) #多重继承 class sample(speaker,student):     a =''     def __init__(self,n,a,w,g,t):         student.__init__(self,n,a,w,g)         speaker.__init__(self,n,t) test = sample("Tim",25,80,4,"Python") test.speak()#方法名同,默认调用的是在括号中排前地父类的方法


0 0
原创粉丝点击