• python学习——面向对象练习2


    1.
    1-1 封装
    把功能封装到类中
    class Message(object):
        def email(self):pass
        def msg(self):pass
        def wechat(self):pass
    
    初始化方法,把封装数据给其他方法使用
    class Dog(object):
        def __init__(self,name):
            self.name = name
    
        def bulk(self):
            print("%s:wang wang wang" %self.name)
    
    
    1-2 继承
    class Father(object):
        def func1(self):
            print('in func1')
    
    class Son(Father):
        def func2(self):
            print('in func2')
    
    obj = Son()
    obj.func1()
    
    
    1-3 多态
    Python原生支持多态,所在多态在python中没有特殊性
    
    
    
    2.
    面向对象的变量:类变量,实例变量
        类变量(静态字段)
            公有类变量(静态字段)
            私有类变量(私有静态字段(
        实例变量(字段)
            公有实例变量(字段)
            私有实例变量(私有字段)
    
    
    class Foo:
        country = '中国'  # 类变量
    
        def __init__(self,name):
            self.name = name    # 实例变量
    
    obj1 = Foo('王小明')
    obj2 = Foo('小樱')
    
    Foo.country = '法国'
    print(obj1.country)
    print(obj2.country)
    
    obj1.name = '大头'
    print(obj1.name)
    
    
    
    3.
    面向对象的方法
        实例方法:使用对象封装__init__方法的值是,用实例方法
        静态方法:方法中使用对象中封装的值是,使用静态方法
        类方法:在方法中需要用到当前类时,用类方法
    
    
    3-1.实例方法:
    class Foo(object):
    
        def __init__(self,name):
            self.name = name
    
        def func(self):
            print(self.name)
    
    obj = Foo('爱丽丝')
    obj.func()
    
    3-2.静态方法和类方法:
    class Foo(object):
    
        @staticmethod
        def static():
            print('666')
    
        @classmethod
        def show(cls):
            print(cls)
    
    Foo.static()
    obj = Foo()
    obj.static()
    Foo.show()
    
    
    
    4.
    class Foo(object):
    
        @property
        def func1(self):
            return 1
    
        @property
        def func2(self):
            return 9
    
    obj = Foo()
    print(obj.func1)
    print(obj.func2)
    
    
    
    5.静态方法和类方法的区别?
        1.编写时:
            静态方法:@staticmethod,参数可有可无
            类方法:@classmethod,至少有一个参数
            实例方法:普通的方法,调用对象封装的值
    
        2.调用时:
            静态方法和类方法:类名.方法名()
            实例方法:对象名.方法名()
    
        3.应用场景:
            如果在方法内部不会用到对象相关的数据时,就可以用静态方法或类方法。需要用到对象相关的数据时,才用实例方法。
            如果在方法中需要用当前类时,类方法默认传参是当前类,可以用类方法。
    
    
    6.定义时不需要写参数:静态方法
    
    
    7.面向对象中公有成员和私有成员有什么不同?
        公有成员:可以在外部直接调用
        私有成员:定义时加"__",只能在内部调用
    
    
    8.  1  12
    
    
    9.  999  11  11  AttributeError
    
    
    10. 666 1 error error 1 error
    
    
    11. 666 1 18 99 1 1000 1098
    
    
    12.
    class Foo(object):
        hobby = "大保健"
    
        def __init__(self,num):
            self.num = num
            self.__salary = 1000
    
        def f1(self):
            print(Foo.hobby)
    
        @staticmethod
        def f2():
            print(Foo.hobby)
    
        @classmethod
        def f3(cls):
            print(cls.hobby)
    
    obj = Foo(1)
    obj.f1()
    obj.f2()
    obj.f3()
    
    
    13.
    Foo类
    
    
    14.
    Foo类
    
    
    15.
    Foo类
    Foo类
    
    
    16.
    foo.f2
    base.f1
    Foo类
    
    
    17.
    class Foo(object):
        @staticmethod
        def __func1():
            print('func1')
    
        def func2(self):
            print('func2')
            self.__func1()
    
    obj = Foo()
    # obj.__func1   外部不可调用
    obj.func2()     #通过内部方法间接调用
    
    
    18.
    class Page(object):
        def __init__(self,lst,page_num=0,dis_page=10):
            self.lst = lst
            self.page_num = page_num
            self.dis_page = dis_page
    
        @property
        def start(self):
            return (self.page_num -1) * self.dis_page
    
        @property
        def end(self):
            return self.page_num * self.dis_page
    
        def show(self):
            self.page_num = int(input('请输入查看的页码:'))
            for i in self.lst[self.start:self.end]:
                print(i)
    
    lst = ['alex-%s' %i for i in range(1,101)]
    
    while 1:
        obj = Page(lst)
        obj.show()
    
    
    #19. 三个类之间的嵌套
    class School(object):
        def __init__(self,address):
            self.address = address
    
    
    class Course(object):
        def __init__(self,name,period,price,school=None):
            self.name = name
            self.period = period
            self.price = price
            self.school = school
    
    
    class Grade(object):
        def __init__(self,name,people,introduce,course=None):
            self.name = name
            self.people = people
            self.introduce = introduce
            self.course = course
    
    #1.学校
    bj = School('北京')
    sh = School('上海')
    sz = School('深圳')
    
    #2.课程
    py1 = Course('Python全栈',110,19999,bj)
    py2 = Course('Python全栈',110,19999,sh)
    py3 = Course('Python全栈',110,19999,sz)
    
    l1 = Course('Linux运维',110,19999,sh)
    g1 = Course('Go开发',119,19999,bj)
    
    #3.课程开班
    gra1 = Grade('全栈21期:',55,'北京GO全栈开发21期',g1)
    gra2 = Grade('Linux运维1期:',45,'上海Linux运维1期',l1)
    
    gra3 = Grade('全栈1期:',45,'深圳全栈开发1期',py3)
    详解
  • 相关阅读:
    asp.net中virtual和abstract的区别分析
    .NET中的Timer类型用法详解
    类型参数的约束(C# 编程指南)T
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    jquery的$.extend和$.fn.extend作用及区别
    类型参数约束 : Controller where T : class,new()
    asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码
    字符串一级指针的内存模型图(盲点,以前自己懵懂)
    字符串的基本操作,初始化和赋值之类的区别,和数据名是一个常量指针不可以改变和赋值(盲点众多)
    关于内存四区和指针的修改问题
  • 原文地址:https://www.cnblogs.com/bilx/p/11381903.html
Copyright © 2020-2023  润新知