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()
#
原文地址:https://www.cnblogs.com/hz-garden/p/12807088.html