day14总结

2018-08-02  本文已影响0人  liuperson

一、重写

继承后:
a.子类可以拥有除父类继承的内容外,添加其他内容和方法
b.父类不可以使用子类的方法和属性

完全重写:
重新实现从父类继承下来的方法
保留父类,添加新的功能

对象调用时,先看有没功能,没有才看父类,如果没有,看爷类

关于方法:
a.在子类中可以直接使用的方法

class Ainmals(object):
    number=10
    """动物类"""
    def __init__(self):
        self.age=0
        self.color=''
    def eat(self):
        print('吃骨头')
    @classmethod
    def get_number(cls):
        print(cls.number)

class Dog(Ainmals):

    def wtach_door_dog(self):
        print('看家')

    def eat(self):
        super().eat()
        print('不好吃')

    @classmethod
    def get_number(cls):
        return super().get_number()
dog=Dog()
    dog.name='大飞'
    dog.age=3
    dog.eat()
    dog.wtach_door_dog()
    dog.get_number()

二、添加属性

继承属性的时候,继承了init方法
给当前类添加对象属性,如果要保留父类的对象属性,需要使用supper(),去调用父类的init方法

class Person:
    def __init__(self,name,age):
        self.name=name
        self.age=age
class Staff(Person):
    def __init__(self,name,age,salary):
        super().__init__(name,age)
        self.salary=salary
if __name__ == '__main__':
    s1=Staff('大飞',28,44)
    print(s1.salary)

    print(s1.age)

class Person:
    def __init__(self,name,age,sex):
      self.name=name
      self.age=age
      self.sex=sex
      self.tall=0

class Student(Person):
    def __init__(self,name='',age=0,tel=''):
        super().__init__(name,age,sex='女')
        self.id='22'
        self.score='33'
        self.tel=tel

s1=Student('大飞',22,123)
print(s1.name,s1.age,s1.tel)

p1=Person('张飞',22,'男')
print(p1.name,p1.age,p1.sex)

s1=Student('李三',18,110)
print(s1.name,s1.age,s1.sex)

三、运算加载符

python中,一个类下,参数不同,叫重载,但不支持,只以后面那个出结果,前面都覆盖了


class Student:
    def run(self):
        print('在跑')
    def run (self,name):
        print('%s在跑'% name)
s1=Student()
s1.run('yuting')
2.重载,重新定义运算符运算的过程

"""
class Student2:
    def __init__(self,name='',age=0,height=0):
        self.name=name
        self.age=age
        self.height=height


    def __gt__(self, other):
        #比较的是属性值
        return self.height>other.height
    def __lt__(self, other):
        return self.age<other.age
    def __add__(self, other):
        return self.age+other.age
    def __sub__(self, other):
        return self.age-other.age
stu1=Student2('aa',18,170)
stu2=Student2('bb',19,150)
if stu1>stu2:
    print('====')
if stu1<stu2:
    print('====')
print(stu1 + stu2)
print(stu1-stu2)

四、内存管理

python内存管理原理

内存中两个特殊的区域
栈:里面的内存管理是系统自动管理(内存开辟和释放(作用域结束,函数结束胡释放,程序结束,就释放))

堆:需要程序员写程序来开辟和释放的(python中也已经自动化)

原理:堆中的数据到底是什么时候释放的
看一个值有几个引用,当一个值没有引用的时候,值对应的内存空间就会被释放
(引用计算机制)
引用:存储对象地址的变量

五、包的使用

封装:
对一个功能————》函数
对功能------》模块和类
对数据-----》类、字典
对多个类----》模块
对多个模块---》包(特殊的文件夹,里面有init.py文件)

导入包
import packbag1
导入某个包中的模块
from packbag1 import my_math
导入某个包的某个模块中某个函数和类
from packbag1.my_math import sum,Math

作业:
0.定义⼀一个学⽣生类。有属性:姓名、年年龄、成绩(语⽂文,数学,英语)[每课成绩的类型为整数] ⽅方法: a. 获取学⽣生的姓名:getname() b. 获取学⽣生的年年龄: getage() c. 返回3⻔门科⽬目中最⾼高的分数。get_course()

class Scores:
    def __init__(self):
        self.chinese = int(input('语文:'))
        self.math = int(input('数学:'))
        self.english = int(input('英语:'))

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

    def get_name(self):
        print (self.name)
    def get_age(self):
        print(self.age)

    def get_course(self):
        print( '最大值是:',max(self.chinese,self.math,self.english))

s1=Scores
s2=Student('大飞',22)
s2.get_course()

结果显示:

语文:1
数学:2
英语:3
最大值是: 3

1.建⽴立⼀一个汽⻋车类Auto,包括轮胎个数,汽⻋车颜⾊色,⻋车身重量量,速度等成员变量量,并通过不不同的构造⽅方法创 建实例例。⾄至少要求 汽⻋车能够加速 减速 停⻋车。 再定义⼀一个⼩小汽⻋车类CarAuto 继承Auto 并添加空调、CD等成 员变量量 覆盖加速 减速的⽅方法


class Auto:
    def __init__(self,tyre=4,color='yellow',weight=500,speed=100):
        self.tyre=tyre
        self.color=color
        self.weight=weight
        self._speed=speed

    def fast(self):
        if 0<= self._speed<60:
            print('请加速')
    def slow(self):
        if 60<=self._speed<120:
            print('请减速')
        else:
            print('请停车')

a1=Auto()
a1.fast()
a1.slow()

class CarAuto(Auto):
    def __init__(self,air,Cd):
        super().__init__()
        self.air=air
        self.Cd=Cd

    def fast(self):
         if 0<= self._speed<60:
            print('请加速')
    def slow(self):
        if 60<=self._speed<120:
            print('请减速')
        else:
            print('请停车')

a2=CarAuto('格力','好歌')
a2.fast()
a2.slow()

管理理员是⼀一种特殊的⽤用户。编写⼀一个名为Admin 的类,让它继承User类。添加⼀一个名为privileges 的属性, ⽤用于存储⼀一个由字符串串(如"can add post"、"can delete post"、"can ban user"等)组成的列列表。编写⼀一个名为 show_privileges()的⽅方法,它显示管理理员的权限。创建⼀一个Admin 实例例,并调⽤用这个⽅方法。

class User:
    firstname=''
    lastname=''

    def __init__(self,name='老张',age=50,sex='男'):
        self.name=name
        self.age=age
        self.sex=sex

    def describeuser(self):
        print('姓名:%s 年龄:%s 姓名:%s'% (self.name,self.age,self.sex))

    def greetuser(self):
        print('hello,你好:%s'% self.name)
class Admin(User):
    def __init__(self,privileges=''):
        super().__init__()
        self.privileges=privileges

    def show_privileges(self):
        print('管理权限:%s'% self.privileges)

a1=Admin(['can add post', 'can delete post', 'can ban user'])
a1.show_privileges()

3.创建⼀一个Person类,添加⼀一个类字段⽤用来统计Perosn类的对象的个数


class Person:
    count=0
    def __init__(self,name=''):
        self.name=name
        Person.count+=1


p1=Person('张三')
p2=Person('李四')
print(Person.count)

上一篇下一篇

猜你喜欢

热点阅读