首页 > 其他 > 详细

面向对象

时间:2020-04-18 01:18:38      阅读:62      评论:0      收藏:0      [点我收藏+]

面向对象

1.类、对象

  • 类:用来描述一类事物,具有相同的属性和方法

    • 内置类:int、float、str、dict、list、tuple、set

    • 类名()会自动调用类中的__init__方法

    • 通过对象名.__dict__就可以查看这个对象的属性和值

    • 修改字典、列表里的值或者对象的某一个属性,都不会影响对象、字典、列表所在的内存空间

    • 实例化的步骤

      • 类名()后:开辟一块内存空间
      • 调用__init__把空间的内存地址作为self参数传递到函数内部
      • 所有的这一个对象需要使用的属性都需要和self关联起来
      • 执行完init中的逻辑之后,self变量会自动的被返回到调用处(发生实例化的地方)
  • python中一切皆对象、对象的类型就是类

    class User:
        def __init__(self, username, password):
            self.username = username
            self.password = password
        def login(self):
            if self.username == "JACK" and self.password == "JACK123":
                print("登陆成功")
            else:
                print("登陆失败")
    user = User("JACK","JACK123")
    user.login()
    print(user.__dict__)
    

2.类的成员和命名空间

  • 静态变量/属性、方法都存储在类的命名空间里

  • 类指针指向存储了类所在的内存空间

  • 对象中的变量只属于对象本身,每个对象有属于自己的空间来存储对象的变量

    class A:
        country = "中国"
        def __init__(self,name,age,country):
            self.name = name
            self.age = age
            self.country = country
        def func1(self):
            print(self)
    print(A.__dict__)
    print(A.func1)
    a = A("zevin", "18", "China")
    print(a.country)
    
  • 如果一个变量是所有对象共享的值,那么这个变量应该被定义为静态变量,所有和静态变量相关的增删改查都应该使用类名来处理

    #统计类的实例化次数
    class Count:
        count = 0
        def __init__(self):
            Count.count += 1
            print(Count.count)
    a = Count()
    b = Count()
    

3.组合

  • 组合:一个类的对象是另外一个类的对象的属性

    ‘‘‘
    学生类:姓名、年龄、班级、学号
    班级类:班级名字、开班时间、老师
    功能:方便代码的修改
    ‘‘‘
    class Student:
        def __init__(self, name, age, clas, sno):
            self.name = name
            self.age = age
            self.clas = clas
            self.sno = sno
    
    class Clas:
        def __init__(self, cname, ctime, cteacher):
            self.cname = cname
            self.ctime = ctime
            self.cteacher = cteacher
    
    py1 = Clas("python1期", "2019-2-2", ‘Pork‘)
    py2 = Clas("python2期", "2019-3-3", "David")
    alvin = Student("alvin", "18", py1, "19020201")
    alisa = Student("alisa", "19", py2, "19030301")
    print(alvin.clas, py1)
    print(alvin.clas.cteacher)
    

4.继承

  • 子类有父类的方法,但是要调用父类的:父类名.方法名(self,参数)

  • 练习

    class Foo:
        def __init__(self):#在每一个self调用func时,只看self是谁
            self.func()
        def func(self):
            print(‘in foo‘)
    class Son(Foo):
        def func(self):
            print(‘in son‘)
    
    Son()
    #in son
    

面向对象

原文:https://www.cnblogs.com/gugu-da/p/12723483.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!