六、Python之OOP

序言

C是面向过程编程,而C++、Java则是面向对象编程(OPP)。数学是描述自然的语言,现实世界在编程语言中就抽象成了数据,比如在编程语言中要描述一个人,只需要给出ta的姓名、性别、年龄、体重等数据就可以了,所谓对象只不过是对数据的一种封装形式。“对象=属性+方法”,一个对象的特征称为属性,一个对象的行为称为“方法”

创建对象类

class Turtle:  # Python中约定类名用大写字母开头,函数小写字母开头

  #属性,从代码来看就是变量
  color='green'
  weight=10
  legs=4
  shell=True
  mouth='大嘴'

  #方法,从代码来看就是函数
  def climb(self):
    print("爬!")

  def run(self):
    print("跑!")

  def bite(self):
    print("咬!")

>>>tt=Turtle() #创建类的实例
>>>tt.color
'green'
>>>tt.climb()
'爬!'

OO(Object Oriented)特点

  • 封装
    数据荫蔽
  • 继承与多态
    要创建一个新的类,其属性、方法与已有的类非常相似,这时候不需要完全重新编制该新类,可以通过“继承”得到父类的属性和方法。
class Parent:
  def hello(self):
    print("我好困")

class Child(Parent): # Class 类型(被继承的类)
  def hello(self):    # 子类定义与父类相同的属性、方法会自动覆盖父类相应的属性、方法
    print("洗洗睡了")

>>> p=Parent()
>>> c=Child()
>>> p.hello()
"我好困"
>>> c.hello()  # 同一个方法(hello)的效果不同,称为多态。
"洗洗睡了"

self指针

由于一个类(class)可以实例化为多个对象,因此这些对象在调用方法时,方法要知道具体是哪一个对象在调用,故对象的每个方法都默认self(自己)作为第一个参数。

class Ball:
  def setName(self,name):
    self.name=name  # Ball.name=name
  def kick(self):
    print('敢踢我%s,试试' %(self.name))
>>> a=Ball()
>>> b=Ball()
a.setName('球A')
b.setName('球B')

公有和私有

只要在变量名、函数名前加__(两个下划线),该变量、函数就变成私有的了

class Turtle:
  __name='乌龟'
  color='green'
  def disName(self):
    print(disName)
>>>tt.Turtle()
>>>tt.__name
Error
>>>tt.disName()
乌龟
>>>tt._Turtle__name # python是伪私有
乌龟 

多重继承与组合

# 多重继承,class 类名(父类1,父类2,父类3,...)
class Parent1:
  def foo1(self):
    print("我是真的!")
class Parent2:
  def foo2(self):
    print("他是假的!")

>>>class child(Parent1,Parent2) # 多重继承
>>>child.foo1()
"我是真的!"
>>>child.foo2()
"他是假的!"
# 组合,在没有父子代的概念时这是“继承”就需要用“组合”代替

class Turtle:
  def __init__(self,x):
    self.num=x

class Fish:
  def __init__(self,y):
    self.num=y

class Pool:
  def __init__(self,x,y): #魔法方法会在实例化时候自动调用
    self.turtle=Turtle(x) #实例化一个Turtle对象存入自身的turtle参数中
    self.fish=Fish(y) #实例化一个Turtle对象存入自身的fish参数中
  
  def print_num(slef):
    print("水池中有乌龟%d,小鱼%d"%(self.turtle.num,self.fish.num))

>>>pool=Pool(1,10) # 类的实例化
>>>pool.print_num()
"水池中有乌龟1,小鱼10"
posted @ 2021-09-27 22:06  王若虚  阅读(204)  评论(0)    收藏  举报