zoukankan      html  css  js  c++  java
  • day06 Python class基础篇

    一.目录 

    1.类与对象的概述

    2.封装

    3.继承

    4.多态

    5.类的成员

    6.类与类之间的关系

    7.私有

    二. 内容讲解

    一.类与对象的概述

          类是对一系列具有相同属性的事物的抽象,相同于设计图纸,而对象则是某个具体的事物,两者之间的关系对象是基于类来实现的。类是对对象的描述,类里面一般包含属性和方法,而属性的设置一般通过__init__()构造 函数来实现,其他的函数在类里面称为方法,因为比普通函数都了一个self。

    类是负责描述对象的    ->  类型
    定义属性和方法
    对象是通过类来创建的具体的个体. 每个对象都有自己的独立的名称空间

    执行动作的时候最好是使用对象去执行.

    self : 当前正在执行方法的对象

    实例1:创建类和对象

    class Person:
    def __init__(self,name,age,gender):
    self.name = name
    self.age = age
    self.gender = gender

    def talk(self):
    print("we can speak Chinese")

    def sleep(self):
    print("the studies show us, adult people should sleep at least 7 hours everyday")

    p = Person("Ivy","24","female")
    p.talk()
    原理分析:创建类的时候会自动在内存里面生成一个类名称空间,当实例化一个对象的时候有会生成另一个名称空间,对象会直接把类下面init里面的属性copy到自己的名称空间里,
    然后需要使用类方法的时候,对象会直接找类里面的方法。

    实例2:给类里面的方法传参

    例子3:写开演唱会

    class Singer:
    def __init__(self,name,salary,gender,songs = []):
    self.name = name
    self.salary = salary
    self.gendeer = gender
    self.songs = songs

    def song_list(self,songs_lst):
    for s in songs_lst:
    self.songs.append(s)

    def sing(self,song):
    print(f'{self.name} is singing {song}')

    def live(self):
    for item in self.songs:
    print(f'{self.name} is singing {item}')

    songs_list = ["寓言","阿刁","花房姑娘"]
    singer = Singer("Angela","100000","female",songs_list)
    singer.sing("淋雨一直走")
    singer.live()

    例子4 银行存取钱
    class Account:
    def __init__(self,card,password,money=10):
    self.card = card
    self.pwd = password
    self.money = money

    def saving(self):
    if self.card == "100000" and self.pwd == "123456":
    saving_number = int(input("Please input money number that you want to saving: ").strip())
    self.money += saving_number
    else:
    print("card number or password is wrong")


    def take_money(self):
    if self.card == "100000" and self.pwd == "123456":
    taking_money = int(input("please input the money number which you plan to take out: "))
    if taking_money <= self.money:
    print(f"you can take money {taking_money}")
    self.money -= taking_money
    else:
    print('sorry,Insufficient balance')
    else:
    print("card number or password is wrong")


    def banlance(self):
    print(f'your current balance is {self.money}')

    p = Account("100000","123456")
    p.banlance()
    p.saving()
    p.take_money()
    p.banlance()

    例子5 对一组模板的定义
    class Msg:
    def email(self):
    print("send message through email")
    def chat(self):
    pass
    def wechat(self):
    print("send message through wechat")

    def app(self):
    print("send message through app")

    def important(self):
    self.email()
    self.wechat()
    self.app()

    msg = Msg()
    msg.important()

    二.封装

     属性的封装:把多个变量封装到一个对象中

     方法的封装:把多个方法封装到一个对象中

    三.继承

       子类可以自动拥有父类的功能除了私有的以外

       单继承:

    class NiuMaoWang:
    def fly(self):
    print("flying")

    class HongHaiEr(NiuMaoWang):
    pass

    honghaier = HongHaiEr()
    honghaier.fly()

    多继承:
    class NiuMaoWang:
    def fly(self):
    print("flying")

    class TieSan:
    def PutOffFire(self):
    print("put out fire")
    class HongHaiEr(NiuMaoWang,TieSan):
    pass

    honghaier = HongHaiEr()
    honghaier.fly()
    honghaier.PutOffFire()
    ps: 一个子类可以拥有多个父类。如果继承了多个父类,会有优先查找最近的那个一。父类也称为基类和超类,子类也称为派生类(python3 里面的继承都是广度优先,
    python2里面默认是深度优先,采用C3算法)

    四.多态

     同一个对象,多重形态

    def duck(duckk):
    duckk.bulk()

    class Monkey:
    def __self__(self):
    pass

    def bulk(self):
    print("bulking")

    monkey = Monkey()
    monkey.bulk()
    duck(monkey)

    待补充

    五.类的成员

      1.变量 分为类变量和实例变量 

           实例变量:对象.方法 调用。

           类变量: 直接定义在类里面,对所有对象开放,特点节约内存,通过类直接调用。(也可以使用实例来调用but不推荐)

      2.方法

         2.1.实例方法:对象.方法 

         2.2.类方法:类名.方法 

               第一个参数要求传过来一个类

               类方法上面必须加一个@classmethod

         2.3.静态方法:类名.方法  也可以是对象.方法

               类方法上面必须加@staticmethod装饰器,相当于在类的名称空间定义了一个普通函数,主要是做分类用。

      3.属性

          把一个方法装饰成一个函数来使用 在类方法上方加@propeerty,主要使用的场景做某些函数会随着时间的推移而变化,例如:年龄或者分页。

    六.类与类之间的关系

         1.依赖关系

               两个事物之间联系不紧密,我需要你但是你不属于我,类与类之间最松散的一种关系。在执行某个方法的时候把另外一个类的对象传递进来

           

    class Person:
    def __init__(self,name,gender):
    self.name = name
    self.gender = gender

    def play_game(self,tools): ps:通过传递参数产生联系
    tools.wzry()

    class Phone:
    def __init__(self,brand,price):
    self.brand = brand
    self.price = price

    def wzry(self):
    print(f'{self.brand} is running 王者荣耀')

    phone = Phone("米6","2300")
    person = Person("Ivy","female")
    person.play_game(phone)

         2.关联关系(我需要你,你也属于我),组合关系,聚合关系

          2.1.关联关系: 两种事物必须是互相关联的. 但是在某些特殊情况下是可以更更改和更更换的.

          2.2. 聚合关系. 属于关联关系中的⼀一种特例例. 侧重点是xxx和xxx聚合成xxx.  各⾃自有各⾃自的 声明周期. 比如电脑. 电脑⾥里里有CPU, 硬盘, 内存等等. 电脑挂了了. CPU还是好的. 还是 完整的个体

          2.3. 组合关系. 属于关联关系中的⼀一种特例例. 写法上差不多. 组合关系比聚合还要紧密. 比 如⼈人的⼤大脑, ⼼心脏, 各个器官. 这些器官组合成⼀一个⼈人. 这时. ⼈人如果挂了了. 其他的东⻄西 也跟着挂了了. 

             例1:关联一对一

    class Boy:
    def __init__(self,name,gender,GirlFriend = None):
    self.name = name
    self.age = gender
    self.GirlFriend = GirlFriend

    def hava_a_dinner(self):
    if self.GirlFriend:
    print(f'{self.name} hava a dinner with {self.GirlFriend.name}')
    else:
    print("single dog, you have no right for dinner")

    class Girl:
    def __init__(self,name,gender):
    self.name = name
    self.gender = gender

    def makeup(self):
    print(f'{self.name} has a big advantege is makeup herself like 20 years old')
    girl = Girl("如花","female")
    boy = Boy("Jack","male",girl)
    boy.hava_a_dinner()
    boy.GirlFriend = None
    boy.hava_a_dinner()

    例2:关联一对多
    class Teacher:
    def __init__(self,name,student_list = []):
    self.name = name
    self.student_list = student_list

    def teach(self):
    print(f'{self.name} is teaching')
    for student in self.student_list:
    student.study()

    class Student:
    def __init__(self,name):
    self.name = name

    def study(self):
    print(f'{self.name} is studying')

    s1 = Student("Ivy")
    s2 = Student("Zoe")
    s3 = Student("Yvette")
    lst = [s1,s2,s3]
    t = Teacher("Tony",lst).teach()
    s1.study()

         3.继承关系,实现关系

    七.私有

    双下划线开头的是私有的内容
    We are down, but not beaten. tested but not defeated.
  • 相关阅读:
    Docker容器启动时初始化Mysql数据库
    使用Buildpacks高效构建Docker镜像
    Mybatis 强大的结果集映射器resultMap
    Java 集合排序策略接口 Comparator
    Spring MVC 函数式编程进阶
    换一种方式编写 Spring MVC 接口
    【asp.net core 系列】6 实战之 一个项目的完整结构
    【asp.net core 系列】5 布局页和静态资源
    【asp.net core 系列】4. 更高更强的路由
    【Java Spring Cloud 实战之路】- 使用Nacos和网关中心的创建
  • 原文地址:https://www.cnblogs.com/guniang/p/10856143.html
Copyright © 2011-2022 走看看