python对象创建流程
Python3.5面向对象与继承图文实例详解本文实例讲述了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中支持多继承,作用:复用,不建议使用多继承(类对象爆炸)、
继承示例代码: