本文实例讲述了Python3.5面向对象与继承。分享给大家供大家参考,具体如下:
1、编程的方式
2、面向对象的基本概念
3、类的基本概念
4、类的定义与调用——简单代码举例
注:建议类名的开头字母用大写,在Python中,类内的函数称作方法,类外的函数还是称作函数。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #类 class Person: i = 10 #属性(变量) def eat(self): #方法(函数) print("eating...") pass #类的调用 a = Person() a.eat()
运行结果:
eating...
class Person(): #对象属性 构造方法 在实例化对象时会自动调用 # 实例化的对象就具有name和age两个属性 #self是指当前的对象 self不是关键字可以被代替,但是习惯使用self指代当前对象 def __init__(self,name,age): # 通过构造方法声明了两个对象属性 #对象.name属性 = name参数 self.name = name self.age = age #声明一个类方法 def speak(self): print("Hello,my name is %s,and I'm %d years old" %(self.name,self.age)) #创建实例对象 会触发构造方法 people01 = Person("Jack",18) #通过Person类实例化出一个people对象 print(people01) #打印Person对象在内存中的地址 print(people01.name,people01.age) #打印对象的属性 #给对象添加属性 people01.sex = "F" print(people01.sex) #类方法的调用 people01.speak()
运行结果:
<__main__.Person object at 0x0059C5B0>
Jack 18
F
Hello,my name is Jack,and I'm 18 years old
5、类的方法
示例代码:
#方法——静态方法 class S(): #实例(对象)属性 def __init__(self,name,age): #self一般指实例对象 self.name = name self.age = age @staticmethod #用staticmethod装饰器修饰 表示test2为静态方法 def test2(): #不能传入self 对象的引用 print("test2...") s1 = S("Joe",18) s1.test2() #通过实例调用静态方法 S.test2() #通过类名调用静态方法 #方法——类方法 class C(): #类属性 country = "China" #实例(对象)属性 def __init__(self,name,age): self.name = name self.age = age @classmethod #用classmethod装饰器修饰 表示test3为类方法 def test3(cls): #cls指的是类 print("test3...",cls.country) #类方法调用类属性 c1 = C("Jack",18) c1.test3() #通过实例调用类方法 C.test3() #通过类名调用类方法
运行结果:
test1...
test2...
test2...
test3... China
test3... China
(1)构造方法:构造方法不能重载(被覆盖)
在Python中内置,每一个类都有一个默认的不带参数的构造方法,不需要人为的单独调用,在调用类的同时就运行了构造方法。
构造方法的作用:初始化数据、创建对象(构造方法的调用)
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Person: def __init__(self): print("构造方法") pass Person() #类的调用--创建对象
运行结果
构造方法
带参数的构造方法:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Person: # def __init__(self): # print("构造方法") def __init__(self,x): print("带参数的构造方法:",x) def add(self,x,y): print(x+y) pass zs = Person("hello") #类的调用--创建对象 zs.add(1,2)
运行结果:
带参数的构造方法: hello
3
(2)面向对象的思路
(3)类方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #类方法 class Person: def eat(self): #类方法 print("eating...") pass a = Person() #类方法调用 a.eat()
运行结果:
eating...
(4)私有方法
只允许在类的内部使用,专门为类服务的。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Person: def eat(self): # 类方法 print("eating...") self.__sleep() # 调用私有方法 def __sleep(self): #私有方法--类的外部不能使用 print("sleeping...") pass b = Person() b.eat()
运行结果:
eating...
sleeping...
6、属性
示例属性、类属性代码:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #属性 class a(): def __init__(self,name,age): self.name = name #实例属性 self.age = age #类内部使用实例属性 self.实例属性名 def get(self): print(self.name) a1 = a("Jack",18) #类内部使用实例属性 self.实例属性名 a1.get() #类外部使用实例属性 对象名.实例属性名 print(a1.name) #类属性 在__init__()方法外声明 #类内部使用 类名.属性名 调用 #类外部使用通过 类名.属性名 或者 对象名.属性名 方式调用 class b(): name = "Janne" #类属性 #类内部使用类属性——类名.属性名 def get(self): print(b.name) #类外部使用类属性 通过 类名.属性名 print(b.name) #类外部使用类属性 通过 对象名.属性名 b1 = b() print(b1.name) #类内部使用类属性——类名.属性名 b1.get()
运行结果:
Jack
Jack
Janne
Janne
Janne
(1)类属性/类变量:在类的外部可以调用
(2)私有变量/私有属性:只能在类的内部,通过self使用
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #属性/变量 class Person: i = 10 #类属性/类变量 __j = 20 #私有属性/私有变量 def eat(self): # 类方法 print("eating...") print(self.__j) # 调用私有变量 pass b = Person() print(b.i) #通过引用调用(建议) print(Person.i) #可通过类名调用 b.eat()
运行结果:
10
10
eating...
20
class GirlFriend(): #声明对象属性 通过构造方法 def __init__(self,name,age,phone,pwd): #给对象的属性(变量名)前面加上 __ 成为了私有的属性 self.__name = name self.__age = age self.__phone = phone self.__pwd = pwd #通过预留的接口 对私有属性名进行访问或修改 def getInfo(self,pwd): if pwd == "1234": print("My girlfriend is %s,and she's %d years old,Her telephone number is %d"%(self.__name,self.__age,self.__phone)) else: print("you failed...") def setName(self,name): self.__name = name #类内修改私有属性 gf = GirlFriend("Janne",18,13511112222,"1234") gf.setName("Malianna") gf.getInfo("1234")
运行结果:
My girlfriend is Malianna,and she's 18 years old,Her telephone number is 13511112222
(3)特殊的类属性
7、继承
Python中支持多继承,作用:复用,不建议使用多继承(类对象爆炸)、
继承示例代码:
#继承 #父类 class Animal(): def __init__(self,name,food,drinks): self.name = name self.food = food self.drinks = drinks def eat(self): print("%s 爱吃 %s" %(self.name,self.food)) def drink(self): print("%s 爱喝 %s" %(self.name,self.drinks)) #子类 class Dog(Animal): def sound(self): print("wonf wonf...") class Cat(Animal): def sound(self): print("miao miao...") dogs = Dog("哮天犬","骨头","雪碧") dogs.eat() dogs.drink() dogs.sound() print("========================") cats = Cat("波斯猫","鱼","可乐") cats.eat() cats.drink() cats.sound()
运行结果:
哮天犬 爱吃 骨头
哮天犬 爱喝 雪碧
wonf wonf...
========================
波斯猫 爱吃 鱼
波斯猫 爱喝 可乐
miao miao...
示例一:
多继承
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #多继承 class Run3000: def run(self): print("run 3000") class Jump3: def jump(self): print("jump 3") class Sport(Run3000,Jump3): #继承 pass sport = Sport() sport.run() sport.jump()
运行结果:
run 3000
jump 3
示例二:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Father: def __init__(self): print("father 构造") def teach(self): print("father teaching") class Child(Father): pass zs = Child() #子类继承与父类,创建子类前先创建父类 zs.teach()
运行结果:
father 构造
father teaching
子类中重写父类的方法:重写体现多态
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Father: def __init__(self): print("father 构造") def teach(self): print("father teaching") class Child(Father): def teach(self): #方法重写 print("child teaching") zs = Child() #子类继承与父类,创建子类前先创建父类 zs.teach()
运行结果:
father 构造
child teaching
新式类:
如果父类的构造方法带参数,则需要子类通过super操作去完成调用。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #新式类 class Father(object): def __init__(self,i): print("father 构造"+ i) def teach(self): print("father teaching") class Child(Father): def __init__(self): super(Child,self).__init__("hello") def teach(self): #方法重写 print("child teaching") zs = Child() #子类继承与父类,创建子类前先创建父类 zs.teach() #运行结果: father 构造hello child teaching
运行结果:
father 构造hello
child teaching
多继承又不完全,父类都有构造方法时,当子类多继承时,只有一个父类的构造方法被调用。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Run3000: def __init__(self): print("run 3000 构造方法") def run(self): print("run 3000") class Jump3: def __init__(self): print("jump 3 构造方法") def jump(self): print("jump 3") class Sport(Run3000,Jump3): #继承 pass sport = Sport() sport.run() sport.jump()
运行结果:
run 3000 构造方法
run 3000
jump 3
8、面向对象编程
(1)定义
(2)示例代码——人开车
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]