面向对象学习笔记


一、面向对象、面向过程,类与对象

面向对象:
python一切都是对象,小到以数字,大到一个类,一个模块都是对象,可以这么理解:凡是能存到内存里的数据或是代码集合都可以称为一个对象。
面向过程:
面向过程注重解决问题的步骤,如“取菜”的步骤为,打开冰箱,取出菜,关上冰箱。
类:
类是对某类对象共性的封装,如人,都具有四肢,但穿的衣服不一样
如何创建一个类:

class 类名():
	类体

二、类的定义

1.属性

对象与类具有的属性,如“人”这一类具有的属性为具有四肢,“小红”这一对象具有的属性为穿红衣服。

添加属性

类的初始属性,__init__指的类对象的初始化方法,属性前加self说明这个属性类中对象可以使用

class person():
    def __init__(self,name):
        self.name = name
lihua = person("lihua")
print(lihua.name)
#lihua

2.方法

def加方法名创建一个实例方法,由类创建的各个对象都可以使用这些方法

class person():
    def __init__(self,name):
        self.name = name
    def age(self,age):
        self.age = age#创建age的属性
        print(self.name,"的年龄是",self.age)#name属性带self,故其他方法可以调用name属性
lihua = person("lihua")#创建一个lihua的对象属于person类
lihua.age(18)#调用方法
#lihua 的年龄是 18

三、类的封装

1.公有属性与私有属性

公有属性可以被所有对象调用,而私有属性只有在类的内部可以被调用,私有属性在属性名前加__即可

class password():
    def __init__(self):
        self.an = "administrator"
        self.__pw = "123456"
    def mima(self):
        print(self.__pw)
a = password()
print(a.an)
print(a.__pw)
a.mima()
#administrator
#AttributeError: 'password' object has no attribute '__pw'
#123456

2.公有方法与私有方法

公有的方法可以被所有实例化对象调用,而私有的方法只能在类的内部被调用,私有方法在方法名前加__即可

class password():
    def __init__(self):
        self.an = "administrator"
        self.__pw = "123456"
    def __mima(self):
        print(self.__pw)
a = password()
print(a.an)
a.mima()
#administrator
#'password' object has no attribute 'mima'

通过公有与私有的特性,可以对类进行封装,提高其安全性

四、类的继承

如果一个类里的方法和属性和另一个需要定义的类里的功能相同,直接调用已经完成的类里的方法和属性,这就是类的继承。

class animal():
    def __init__(self):
        self.bark = "bark"
class dog(animal):
    pass
wangcai = dog()
print(wangcai.bark)
#bark

子类可以直接调用父类的属性,也可创建自己的属性,子类继承的属性若不合适也可修改

class animal():
    def __init__(self):
        self.bark = "bark"
        self.name = "name"
class dog(animal):
    def __init__(self,name):
        self.age = 4
        self.name = name
wangcai = dog("wangcai")
print(wangcai.name)
print(wangcai.bark)
print(wangcai.age)
#wangcai
#AttributeError: 'dog' object has no attribute 'bark'
#4

由此可见,当子类定义一个和父类相同的属性名或方法名时,父类的属性和方法就会被子类的覆盖,调用的时候就不会调用父类的方法和属性

子类可以有多个父类,但是但父类中有重名的方法和属性时,优先使用的是第一个父类中的方法和属性,第一个父类不是指定义的顺序而是子类里继承的顺序。左边的优先级高于右边

class animal():
    def __init__(self):
        self.bark = "bark"
        self.name = "name"
class dog(animal):
    def __init__(self):
        self.age = 4
        self.name = "dog"
class wangcai(dog,animal):
    pass
wc = wangcai()
print(wc.name)
#dog

五、多态

指对象有多种形态,不同对象调用相同方法,产生不同的结果。继承和调用父类的方法。
多态的主要作用是实现接口的重用

class Shape:
    def __init__(self,name):
        self.name = name
    def s(self):
        pass
class Circle(Shape):
    def attribute(self,r):
        self.r = r
    def s(self):
        print("面积是",3.14*self.r**2)
        print("周长是",2*3.14*self.r)
class Rectangle(Shape):
    def attribute(self,width,height):
        self.width = width
        self.height = height
    def s(self):
        print("面积是",self.width*self.height)
        print("周长是",(self.width+self.height)*2)
def jisuan(shape):
    if isinstance(shape,Shape):
        shape.s()
circle = Circle("yuan")
circle.attribute(2)
rectangle = Rectangle("fang")
rectangle.attribute(3,4)
jisuan(circle)
jisuan(rectangle)
#面积是 12.56
#周长是 12.56
#面积是 12
#周长是 14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值