• 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.
  • 相关阅读:
    java设计模式0--设计模式简介
    Eclipse常用快捷键与代码模板
    hadoop文件系统与I/O流
    java学习笔记16--I/O流和文件
    hadoop压缩框架
    hadoop中典型Writable类详解
    java学习笔记15--多线程编程基础2
    redis配置密码的方法
    编写的windows程序,崩溃时产生crash dump文件的办法
    windows程序崩溃生成dump文件
  • 原文地址:https://www.cnblogs.com/guniang/p/10856143.html
Copyright © 2020-2023  润新知