A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Nichoals

初级黑马

  • 黑马币:24

  • 帖子:8

  • 精华:0

© Nichoals 初级黑马   /  2018-10-4 22:02  /  767 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Nichoals 于 2018-10-4 22:06 编辑

1.面向对象
面向对象是一种编程思想,面向过程关注的是完成工作的步骤,面向对象关注的是能完成工作。
2.类和对象
对象是类的具体表现形式,是实际存在的个体。(类是一系列事物的统称)
特征分类:
class CapWords:  #类名:大驼峰命名法
    def ...(self,参数列表):
        pass #占位符
    def ...(self,参数列表):
        pass

创建对象:
对象变量 = 类名()
对象.方法名()
3.成员方法class Cat:
    def __init__(self):  #init方法也称为构造方法,创建对象时为对象初始化成员变量
        self.type = "波斯猫"  # 公有属性/共有变量
        self.name = None

cat1 = Cat()  # 取值
print(cat1.type)
cat1.name = "大帅"  # 赋值
print(cat1.name)
# 给cat1穿衣服
cat1.cloth = "red"  # 独有属性/独有变量
print(cat1.cloth)
4.魔术方法init、str
魔术方法是在类中声明、定义的方法,执行时无需手工调用,自动执行。
__ init__方法在创建对象时被运行,无需手工调用即可执行
__ str __方法是在使用print函数打印输出对象到屏幕时被调用的方法,用于返回对象的规范化字符串表现形式
def __ str__(self):        return 打印对象时显示的信息代码如下:class Cat:    def __init__(self):        self.type = "波斯猫"        self.name = None    def __str__(self):        return "nihao"tom = Cat()print(tom)-->nihao
5.类变量、类方法
类变量不允许使用对象名进行调用修改,只能通过类名修改
cat1.subject = “猫”     x
Cat.subject = "喵星人"    √
类方法:@classmethod

class Cat:
    subject = "猫科"

    def __init__(self,name,color):
        self.name = name
        self.color = color

    def eat(self):
        print("小猫爱吃鱼")
        print(self.name)
        print(Cat.subject)
        Cat.show_type()  # print(self.show_type())

    @classmethod
    def show_type(cls):
        print("type is none")
        print(cls.subject)
        print("*" * 20)


cat1 = Cat("大帅", "white")
cat1.eat()
Cat.show_type()
成员方法可以调用类里面的所有属性、所有方法,还可以调用类方法。
类方法只能调用类属性
对象、类都可以调用静态方法,最好 对象.静态方法名。
6.静态方法
@staticmethod
静态方法与类不紧密,可以转化成外部函数使用
7. 面向对象三大特性:封装、继承、多态

封装
封装操作可以对受访问保护的成员进行功能开放的控制,达到保护数据不被非法访问的目的
  • __私有


class Card:
    def __init__(self):
        self.id = None
        self.__pwd = None
    def get_pwd(self):
        return self.__pwd
    def set_pwd(self, pwd):
        self.__pwd = pwd
    def __name(self):
        self.__username = None

c = Card()                  
c.set_pwd("123456")
print(c.get_pwd())

-->123456
继承
继承中,子类重写父类方法,执行重写后的方法
super().方法名()---在子类中访问父类中被重写的方法

class Grandpa:
    def sing(self):
        print("爷爷唱歌")
class Father(Grandpa):
    def sing(self):
        print("爸爸擅长唱歌。")
        super().sing()
class Mother(Grandpa):
    def sing(self):
        print("妈妈唱歌很难听。")
        super().sing()
class Child(Father, Mother):
    def sing(self):
        print("在下歌神洞庭湖")
        Father.sing(self)
        super().sing()

c = Child()
c.sing()
print(Child.__mro__)
# (<class '__main__.Child'>, <class '__main__.Father'>, <class '__main__.Mother'>, <class '__main__.Grandpa'>, <class 'object'>)
在下歌神洞庭湖爸爸擅长唱歌。妈妈唱歌很难听。爷爷唱歌爸爸擅长唱歌。妈妈唱歌很难听。爷爷唱歌

多态
一个对象具有多种形态,在不同的使用环境中以不同的形态展示其功能,称该对象具有多态特征
class Teacher:
    def teach(self):
        print("教授知识")

class Driver:
    def drive(self):
        print("开车")

class Man(Teacher,Driver):
    def teach(self):
        print("教授Python知识")
    def drive(self):
        print("开小轿车")

class Demo:
    def play(self,driver):
        driver.drive()

    def study(self,teacher):
        teacher.teach()

# 方案一:创建司机对象
d = Driver()
# 方案二:创建了一个具有司机特征的对象
man = Man()
demo = Demo()
demo.play(man)
demo.study(man)
--->  开小轿车        教授Python知识







0 个回复

您需要登录后才可以回帖 登录 | 加入黑马