• python学习日记第四天


    '''
    面向对象下
    一 .封装
    通常把隐藏属性,方法与方法实现细节的过程称为封装,为了保护类里面的属性,避免外界随意赋值,可以采用:
    1.把属性定义为私有属性,及在属性名前加上两个下划线.
    2.添加可以供外界调用的两个方法,分别用于设置或获取属性值.
    例1
    二 .继承
    1.单继承
    类的继承是指在一个现有类的基础上构建一个新的类,构建出来的类被称为子类,现有类被称为父类,子类自动继承父类的属性和方法
    在Python中,继承的语法格式是:
    class 子类名(父类名): 注:父类名未标出是默认继承自object的:class Person=class Person(object)
    例2
    子类没有继承父类的私有属性和方法,而且不能访问父类的私有方法.一般情况下,私有属性和方法都是不对外公布的,只能用来做其内部的事情
    例3
    实际上,python在运行时会把类里面的私有属性的名称进行修改,及在私有属性名称的前面加上前缀"_",如:"__color"-->"_self.__color"
    2.多继承
    有多个父类类的子类 注:如果多个父类是平行关系,则相同的方法,子类先继承哪个父类,就调用哪个父类的方法,,如果当前类的继承关系非常复杂,Python
    可以调用mro算法找到合适的类
    例4
    3.重写父类与调用父类的方法:
    例5
    三 .多态
    多态只在不考虑对象类型的情况下使用对象
    例6

    四 .类属性和实际属性
    类属性:
    class 类名(object):
    number=0 #number就是类属性,定义在__init__里的都是实例属性
    对于公有的类属性,可以通过类对象和实例对象访问
    例7
    五.类方法和静态方法
    1.类方法
    可以使用修饰器@classmethod来标记类方法
    格式:
    class 类名(object):
    number=0 #类属性
    @classmethod #类方法
    def 类方法名(cls):
    方法体
    例8
    2.静态方法
    使用@staticmethod标记静态方法
    格式:
    class 类名(object):
    @staticmethod #静态方法
    def 静态方法名():
    方法体
    例9
    实例方法,类方法,静态方法使用:
    实例方法:修改实例属性
    类方法:修改类属性
    静态方法:辅助功能,如:打印菜单
    注:实例方法不能用类名访问

    小结:面向对象的知识,包括面向对象的三大特征(封装,继承,多态)
    了解了,类属性,实例属性,类方法,静态方法


    '''
    #例1:
    # #原:
    # class Person: #定义类
    # def __init__(self,name,age): #构造方法
    # self.name=name #姓名
    # self.age=age #年龄
    # person=Person("幻幽",18) #建立对象
    # person.age=300 #给对象重新赋值
    # print(person.age)
    # #封装:
    # class Person:
    # def __init__(self,name,age):
    # self.name=name
    # self.__age=age #改
    # def set_age(self,new_age):
    # if new_age>0 and new_age<120:
    # self.__age=new_age
    # def get_age(self):
    # return self.__age
    # person=Person("幻幽",18)
    # try:
    # print(person.__age) #无法访问,因为__age为私有属性
    # except:
    # print("无法访问")
    # person.set_age(19)
    # print(person.get_age())
    #例2
    # #单继承:
    # class Cat: #或class cat(object):
    # def __init__(self,color="白色"): #定义颜色属性并付给初始值
    # self.color=color
    # def run(self):
    # print("-----------跑-------------")
    # class percat(Cat):
    # pass
    # cat_black=percat("黑色");
    # cat=percat()
    # cat.run()
    # print(cat.color)
    # cat_black.run()
    # print(cat_black.color)
    #例3
    # #私有
    # class Animal(object):
    # def __init__(self,color="白色"):
    # self.__color=color
    # def __test(self):
    # print(self.__color)
    # def test(self):
    # print(self.__color)
    # class Dog(Animal):
    # def dog_test_one(self):
    # print(self.__color)
    # def dog_test_two(self):
    # self.__test()
    # self.test()
    # dog=Dog("棕色")
    # dog.dog_test_one()
    # dog.dog_test_two()
    #例4
    # #多继承
    # class Bird(object):
    # def fly(self):
    # print("--鸟儿在天上飞--")
    # def breathe(self):
    # print("鸟儿呼吸")
    # class Fish(object):
    # def swim(self):
    # print("--鱼儿在水里游泳--")
    # def breathe(self):
    # print("鱼儿呼吸")
    # class Volador(Bird,Fish):
    # pass
    # volador=Volador()
    # volador.fly()
    # volador.swim()
    # volador.breathe()
    #例5
    # #重写和调用父类
    #1
    # class Person(object):
    # def say_hello(self):
    # print("hello")
    # class Chinese(Person):
    # def say_hello(self):
    # print("吃了吗")
    # chinese=Chinese()
    # chinese.say_hello()
    # #2
    # class Animal(object):
    # def __init__(self,leg_count):
    # #腿的数量
    # self.leg_count=leg_count
    # class Bird(Animal):
    # def __init__(self,leg_count):
    # self.plume="白色"
    # #调用父类方法
    # super().__init__(leg_count)
    # bird=Bird(2)
    # print("有一只%s条腿%s羽毛的鸟站在树上唱歌!!"%(bird.leg_count,bird.plume))
    #例6
    # #多态
    # class Animal(object):
    # def shout(self):
    # print("动物叫声")
    # class Dog(Animal):
    # def shout(self):
    # print("汪汪汪")
    # class Cat(Animal):
    # def shout(self):
    # print("喵喵喵")
    # def func(temp):
    # temp.shout()
    # dog=Dog()
    # func(dog)
    # cat=Cat()
    # func(cat)
    #例7
    # #类属性
    # class Cat(object):
    # number=0
    # def __init__(self,color="白色",):
    # self.color=color
    # self.age=11
    # self.number=100
    # cat=Cat()
    # #用对象访问是可以的
    # print(cat.number)
    # #常用方式是用类去访问类属性
    # print(Cat.number)
    #例8
    # #类方法
    # class Test(object):
    # number=0
    # @classmethod
    # def set_number(cls,new_number):
    # cls.number=new_number
    # Test.set_number(300)
    # print(Test.number)
    #例9
    # #静态方法
    # class Test(object):
    # @staticmethod
    # def print_test():
    # print("我是静态方法")
    # Test.print_test()
    # test=Test()
    # test.print_test()
    #
  • 相关阅读:
    软件项目管理总体流程设计
    Delphi 编译时 提示 Internal error: URW3537 错误
    Oracle OLEDB 的手工分发
    Oracle10g Client的手工分发
    Delphi 处理在字符串截取中避免出现半个汉字
    Oracle ODP.Net 的手工分发
    项目中问题解决杂谈audio
    按钮 stylesheet 字符串;
    pb使用
    web测试和app测试的重点
  • 原文地址:https://www.cnblogs.com/hz-garden/p/12807088.html
Copyright © 2020-2023  润新知