Python基础语法学习--面向对象编程基础

1.面向对象(OOP)

  • 万物皆对象,对象拥有自己的特征和行为
  • 有些对象是具有相同特征和行为的,我们可以将其抽象为类
  • 类是对象的类型,具有相同的属性和行为
  • 类是抽象的,在使用时通常会找到这个类的一个具体存在

1.1)类和对象的关系

  • 类是对象的类型,对象是类的实例。类是抽象的概念,而对象是一个你能够摸得着看得到的实体。二者相辅相成,谁也离不开谁
  • 类实例化成对象

2.定义类

2.1)类的构成

  • 类由三个部分组成
  • 类的名称:类型
  • 属性:对象的属性
  • 方法:对象的方法

2.2)创建和使用类

  • 定义一个类的语法:
  • class 类名:
  •     属性列表
  •     方法列表

代码

class Animal():
    # 属性:种类,姓名
    def __init__(self,types,name,shouts):# 初始化 self表示实例后对象的本身
        self.name = name
        self.types = types
        self.shouts = shouts

    # 方法:叫
    def shout(self):
        print("%s,%s,%s"%(self.types,self.name,self.shouts)) # %s表示占位符,与后面()内的参数一一对应

dog1 = Animal('泰迪','小黑','汪汪叫')
dog1.shout()
cat1 = Animal('波斯','小黄','喵喵叫')
cat1.shout()

运行结果

这里写图片描述

2.3)init()构造方法和self

  • init()是一个特殊的方法,方法前后都有两个下划线。
  • init()方法都会默认被运行
  • 作用是初始化已实例化后的对象(每次实例化后都会自动调用)
  • 在方法定义时,第一个参数self是必不可少的。类的方法和普通的函数的区别就是self,self不是python的关键字,可以用其他单词取代,只是按照惯例和标准的规定,推荐使用self

代码

class Animal():
    # 属性:种类,姓名
    def __init__(self,types,name,shouts):# 初始化 self表示实例后对象的本身
        self.name = name
        self.types = types
        self.shouts = shouts
        print("构造方法调用")

    # 方法:叫
    def shout(self):
        print("%s,%s,%s"%(self.types,self.name,self.shouts)) # %s表示占位符,与后面()内的参数一一对应

dog1 = Animal('泰迪','小黑','汪汪叫')
dog1.shout()
cat1 = Animal('波斯','小黄','喵喵叫')
cat1.shout()

运行结果

这里写图片描述

3.继承和多态

3.1)单继承

代码

class Animal():
    def shout(self):
        print("汪汪叫")
# 单层继承
class Dog(Animal): #继承父类
    pass
dog = Dog()
dog.shout()

# 多层继承
class Taidi(Dog): # 继承父类的父类
    pass
taidi = Taidi()
taidi.shout()

运行结果

这里写图片描述

3.2)重写父类方法

代码

# 重写
class Animal():
    def shout(self):
        print("汪汪叫")
    def eat(self):
        pass

class Dog(Animal):
    pass

class Taidi(Dog):
    pass
class Cat(Animal):
    def shout(self):
        print("喵喵叫")

cat = Cat()
cat.shout()

运行结果

这里写图片描述

3.3)多继承

  • 语法
  • class 类名(Base1,Base2,Base3)
  •     属性
  •     方法
  • 需要注意圆括号中父类的顺序,如果继承父类中有相同的方法名,而子类中使用时未指定,python将从左到右查找父类中的是否包含该方法

代码

# 多继承
class Animal():
    def shout(self):
        print("喵喵叫")

class Dog():
    def shout(self):
        print("汪汪叫")

class Taidi(Dog,Animal):
    pass
taidi = Taidi()
taidi.shout()

class Taidi(Animal,Dog):
    pass
taidi = Taidi()
taidi.shout()

运行结果

这里写图片描述

4.类属性和方法

4.1)私有属性

代码

# 私有属性(前面加两个下划线)
class Person():
    # def __init__(self):
    #   self.__name = '小明'

    def set_name(self):
        self.__name = '小明'
    def get_name(self):
        return self.__name

    # def set_age(self,new_age):
    #   if new_age>0 and new_age<100:
    #       self.age = new_age
    #   else:
    #       self.age = 18

    # def get_age(self):
    #   return self.age

xiaoming = Person()
# xiaoming.age = 10
# xiaoming.set_age(10)
# age = xiaoming.get_age()
# print(age)
# print(xiaoming.__name) 如果用__init__()初始化私有属性,会报错
xiaoming.set_name()
name = xiaoming.get_name()
print(name)

运行结果

这里写图片描述

4.2)私有方法(前面加两个下划线)

代码

class Person():
    def __eat(self):
        print("这是私有方法:__eat()")

    def get_eat(self):
        self.__eat()

xiaoming = Person()
# xiaoming.__eat() 访问私有方法会报错
xiaoming.get_eat()

运行结果

这里写图片描述

4.3)继承中使用私有属性和私有方法

代码

class Preson():
    def __init__(self):
        self.__name = '小明'
        self.age = 10
    def test1(self):
        print("----test1----")
    def __test2(self):
        print("----test2----")
    def test3(self):
        self.__name
        self.__test2()

class xiaoming(Preson):
    pass
    # def test3(self):
        # self.__name 私有属性不能被继承
        # self.__test2() 私有方法不能被继承

xiaoming1 = xiaoming()
xiaoming1.test3()

运行结果

这里写图片描述

4.4)实例属性和类属性

代码

class Person():
    # 属性
    num = 0 # 类属性
    def __init__(self):
        self.name = '小明' # 实例属性
        Person.num += 1 # 类属性通过类名.
    # 方法

# 通过类创建的实例对象的个数

a = Person()

b = Person()

print(Person.num)

运行结果

这里写图片描述

4.5)实例方法、类方法和静态方法

代码

# 实例方法、类方法和静态方法
class Animal():
    # 类属性
    num = 0
    # 类名.num
    # 实例方法
    def __init__(self):
        # 实例属性
        self.name = '小明'

    @classmethod # 类方法
    def test1(cls):
        # Animal.num = 100
        cls.num = 100
        print(cls.num)

    @staticmethod # 静态方法
    def test2():
        print("欢迎进入宠物管理系统!")

animal = Animal()
# 通过实例对象调用
animal.test2()
animal.test1()
# 通过类名.调用
Animal.test2()
Animal.test1()

运行结果

这里写图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值