Python基础018--类的创建及实例化、类继承

类的创建以及实例化、类继承

  • 类的创建以及实例化

    • 定义:用来描述具有相同的属性和方法的对象的集合;它定义了该集合中每个对象所共有的属性和方法;对象是类的实例;
    • 类名通常由大写字母打头,这是标准的惯例;
      • eg: class BookShop(object):
    • 实例化--->创建一个类的实例,类的具体对象;
    • 方法:类中定义的函数
    • 对象:通过类定义的数据结构实例;包括两个数据成员(类变量和实例变量)和方法
    • 类变量是定义在类中函数体之外的;实例变量是定义在方法内的变量,只作用于当前实例的类;
    # 类的实例化
    In [3]: class Employee(object):
    ...:     empCount = 0                                        
    ...:     def __init__(self,name,salary):                     # 实例化对象
    ...:         self.name=name
    ...:         self.salary = salary
    ...:         Employee.empCount += 1
    ...:     def displayCount(self):
    ...:         print 'Total Employee %d' % Employee.empCount
    ...:     def displayEmployee(self):
    ...:         print 'Name:',self.name, 'salary:',self.salary
    ...:         
    
    In [4]: emp1 = Employee('Zara',2000)                        # 创建类中的一个对象
    In [5]: emp2 = Employee('Manni',5000)
    In [6]: emp1.displayEmployee()                              # 获取这个对象的相关信息
    Name: Zara salary: 2000
    In [7]: emp2.displayEmployee()
    Name: Manni salary: 5000
    In [8]: print 'Total Employee %d' % Employee.empCount       # 获取对象的个数
    Total Employee 2
    In [9]: emp1.age = 7                                        # 添加一个age属性
    In [10]: emp1.displayEmployee() 
    Name: Zara salary: 2000
    In [11]: emp1.age = 8                                       # 修改这个age属性
    In [13]: hasattr(emp1, 'age')                               # 判断是否有这个属性    
    Out[13]: True
    In [14]: getattr(emp1, 'age')                               # 得到一个属性
    Out[14]: 8
    In [15]: setattr(emp2, 'age', 18)                           # 添加一个属性
    In [16]: getattr(emp2, 'age')
    Out[16]: 18
    In [17]: delattr(emp1, 'age')                               # 删除这个属性
    In [18]: hasattr(emp1, 'age')
    Out[18]: False
    
    
  • _init_魔法方法在创建对象的时候使用,自动调用,可以在这里初始化属性;

  • self代表类的实例且必须在第一位,self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数;

    • self也是类方法和普通方法的一个特别的区别-->他们必须有一个额外的第一个参数名称按照惯例应该是self;
    • self不是python关键字,换成其他的也可以正常的执行;
  • 面向对象的各种魔法属性

    • _init_魔法方法:这个方法在创建对象的时候使用,自动调用,可以在这里初始化属性
    • _str_魔法方法:当对象转成字符串的时候自动调用,必须有返回值;
    • _new_魔法方法:创建对象,返回创建对象的值
      • 在_init_之前调用
      • 调用_new_,返回一个实例对象
      • 调用_init,将调用_new返回的实例对象,作为一个参数给self
  • 类继承

    • 定义:即一个派生类(derived class)继承基类(base class)的字段和方法;
    • 可以用issubclass来判断一个类是不是另一个类的子类
    # 类的继承
    In [20]: class Parent(object):
    ...:     parentAttr  = 100
    ...:     def __init__(self):
    ...:         print '调用父类构造函数'
    ...:     def parentMethod(self):
    ...:         print '调用父类方法'
    ...:     def setAttr(self, attr):
    ...:         Parent.parentAttr = attr
    ...:     def getAttr(self):
    ...:         print "父类属性:",Parent.parentAttr
    ...: class Child(Parent):
    ...:     def __init__(self):
    ...:         print "调用子类构造方法"
    ...:     def childMethod(self):
    ...:         print '调用子类方法'
    ...:         
    
    In [21]: c = Child()                        # 实例化子类
    调用子类构造方法
    In [23]: c.childMethod()                    # 调用子类方法
    调用子类方法
    In [25]: c.parentMethod()                   
    调用父类方法
    In [27]: c.setAttr(200)                     # 设置属性
    In [28]: c.getAttr()
    父类属性: 200
    In [33]: issubclass(Child,Parent)           # 判断是否是父子关系
    Out[33]: True
    
    # 多重继承
    In [38]: class P1(object):
    ...:     def foo(self):
    ...:         print 'called P1-foo()'
    ...: class P2(object):
    ...:     def foo(self):
    ...:         print 'called P2-foo()'
    ...:     def bar(self):
    ...:         print 'called P2-bar()'
    ...: class C1(P1,P2):
    ...:     def bar(self):
    ...:         print 'called C1-bar()'
    ...:         
    In [39]: c = C1()                           # 实例化子类
    In [40]: c.foo()                            # 调用父类P1中的方法,如果父类潘P1中没有去父类P2中寻找
    called P1-foo()
    In [41]: c.bar()                            # 调用属性时优先调用自己的属性,如果自己没有再去父类中寻找
    called C1-bar()
    
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,205评论 4 16
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,537评论 18 399
  • 生活与工作到处都存在博弈游戏,处处都需要策略,只有了解对方,知己知彼,才能百战不殆,才不会输得更惨!
    耿婷婷GTT阅读 229评论 0 0
  • 001. 酵素可以实现内养外调的功效 我们的身体是由DNA所做成的酵素发挥其功能而构成,包括健康与美丽在内的各种生...
    欣儿麻阅读 191评论 0 0
  • 文/宝木笑 去年,李安的新作《比利•林恩的中场战事》上映,一如既往喜欢李安用独有的东方细腻来文火慢炖一个宏大的主题...
    宝木笑阅读 459评论 1 11