python之面向对象

面向对象

1.面向过程开发,程序的实现逻辑是我们一步一步参与实现的
2.面向对象开发,是基于面向过程得来的思想,在程序中不断创建对象,指挥对象做事情

面向对象的三大特征:
	封装
    继承
    多态
    抽象
世界万物皆可对象
任意一个事物,都可以从两个方面去描述,属性,行为

面向对象开发

语法格式

#面向对象的思想,创建一个类。然后根据这个类创建若干个对象
#定义类
class 类名:
    #行为函数
    def xxx():
        pass
    ...
#根据类创建对象
p = 类名()
p.xxx()

创建两个对象的情况

class MessageInfo:
    def send_email(self, name):
        print(f'发送邮件给{name}')
    def send_phone_message(self,name):
        print(f'发送手机短信给{name}')
       
#创建一个对象
m1 = MessageInfo()
m1.send_email('a')
m1.send_phone_message('a')

#创建第二个对象
m2= MessageInfo()
m2.send_email('a')
m2.send_phone_message('a')
  • 解决了多参数的问题
  • 解决了数据封装的问题

面向对象开发的三大特征

  • 封装: 将数据封装在对象中
  • 继承: 子类继承父类
  • 多态:某种事物在不同状态下的体现。对python而言,默认支持多态,因为python是动态数据类型。

封装

  • 将数据封装在对象中
lass Student:
    def __init__(self, name, age):
        self.__name = name
        # 在成员变量前面加__表示将该成员变量变成私有的了,这个变量只能在当前类中可以访问
        self.__age = age

    def __str__(self):
        return f'姓名:{self.name}, 年龄:{self.__age}'

    def set_age(self, age):
        self.__age = age
    
    def get_age(self):
        return self.__age
    
    def set_name(self, name):
        self.__name = name
    
    def get_name(self):
        return self.__nameclass Student:
    def __init__(self, name, age):
        self.name = name
        # 在成员变量前面加__表示将该成员变量变成私有的了,这个变量只能在当前类中可以访问
        self.__age = age

    def __str__(self):
        return f'姓名:{self.name}, 年龄:{self.__age}'

    def set_age(self, age):
        if age > 150 or age < 0:
            print('年龄不合法,默认改为18')
            self.__age = 18
        else:
            self.__age = age


# 创建一个学生对象
s1 = Student('张三', 18)
print(s1)
# s1.__age = 1000
# print(s1)
# print(s1.__age)
s1.set_age(20)
print(s1)
__init__()函数 构造一个对象的作用
__str__()函数 返回成员变量的情况
将成员变量私有化,在变量的前面加__
提供成员变量对应的set_xxx()函数 以及 get_xxx()函数

继承

  • 继承的写法
lass Student:
    def __init__(self, name, age):
        self.__name = name
        # 在成员变量前面加__表示将该成员变量变成私有的了,这个变量只能在当前类中可以访问
        self.__age = age

    def __str__(self):
        return f'姓名:{self.name}, 年龄:{self.__age}'

    def set_age(self, age):
        self.__age = age
    
    def get_age(self):
        return self.__age
    
    def set_name(self, name):
        self.__name = name
    
    def get_name(self):
        return self.__name
  • 父类无法使用子类中的功能
  • 子类要想使用父类中的东西,通过super()的方法
  • super(), 一般是用作在子类中函数内部,访问父类中的类成员变量
 普通员工:工号 姓名 化名 职位 薪资
class Staff:
    def __init__(self, sid, name, new_name, job, salary):
        self.sid = sid
        self.name = name
        self.new_name = new_name
        self.job = job
        self.salary = salary

    def __str__(self):
        return f'工号:{self.sid}, 姓名:{self.name}, 化名:{self.new_name}, 职位:{self.job}, 薪资:{self.salary}'

    def work(self):
        print('工作')


# 组长:   工号 姓名 化名 职位 薪资 奖金
class Leader(Staff):
    def __init__(self, sid, name, new_name, job, salary, common):
        super().__init__(sid, name, new_name, job, salary)
        self.common = common

    def __str__(self):
        return f'工号:{self.sid}, 姓名:{self.name}, 化名:{self.new_name}, 职位:{self.job}, 薪资:{self.salary}, 奖金:{self.common}'


# 创建一个普通员工对象
s1 = Staff('sj1001', '张三', '张三丰', '大数据开发工程师', 8500)
print(s1)

# 创建一个组长对象
s2 = Leader('sj1002', '李四', '韩立', '高级大数据开发工程师', 18000, 20000)
print(s2)

多态

#python默认支持多态
class Animal:
    pass
class Tiger(Animal):
    pass
class Lion(Animal):
    pass

s1 = Tiger()
s2 = Lion()


Animal a1 = new Tiger();

抽象

# 定义一个动物类
class Animal:
    @abstractmethod
    def eat(self):
        pass


class Dog(Animal):
    @override
    def eat(self):
        print('狗吃肉')


class Cat(Animal):
    @override
    def eat(self):
        print('猫吃鱼')


d1 = Dog()
d1.eat()

c1 = Cat()
c1.eat()

类变量

#类变量在创建对象的时候复制一份到子类对象中
class Demo:
    a1 = 100

    def fun1(self):
        print('hello world')


d1 = Demo()
print(Demo.a1) #100
d2 = Demo()
print(Demo.a1) #100


print('--------------')
d1.a1 = 200
print(Demo.a1) #100
print(d1.a1) #200
posted @ 2024-01-16 11:13  low-reed  阅读(18)  评论(0)    收藏  举报