美文网首页
类和对象(一)

类和对象(一)

作者: 憧憬001 | 来源:发表于2018-11-21 17:44 被阅读0次

    定义:
    类:就是拥有相同和功能的对象的集合(类是抽象的)
    对象:类的实例(对象是具体的)

    一、编程思想

    • 1.面向对象编码 - 逻辑、算法
      遇到问题,考虑直接把逻辑思维转换成代码,解决问题

    • 2.函数式编程 - 函数
      遇到问题,考虑使用函数解决

    • 3.面向对象编程 - 类和对象
      遇到问题,考虑使用对象解决

    二、类的声明

    • 类:就是拥有相同属性和相同功能的对象的集合
      对象:类的实例

    类的声明
    class 类名(父类列表):
    类的内容

    说明:
    class - 声明类的关键字
    类名 - 标识符,不能是关键字;采用驼峰式命名,并且首字母要大写

    (父类列表) - 继承语法;可以省略,省略的时候相当于(object)
    类的内容 - 主要包含属性和方法

    属性和方法
    类中的属性 - 指的是在类中声明的变量;分为类的字段和对象属性
    类型的方法 - 指的是在类中声明的函数;分为对象方法,类方法和静态方法

    • 3.创建对象
      类名() ---> 创建类对应的对象
    class Person:
        """人类"""
        num = 66
        def eat(self):
            print("吃")
    
    xiaoli = Person()
    print(xiaoli)
    print(xiaoli.eat())
    >>>>
    <__main__.Person object at 0x000001D358A8E0F0>
    吃
    None
    

    三、对象方法

    • 1.对象方法
      直接声明在类中,并且自带一个叫self的参数的函数

    2.对象方法的调用 - 通过对象调用对象的方法
    对象.对象方法

    3.self(当前对象)
    通过对象调用的对象的方法,对象方法中的第一个参数self不用传参
    系统会自动将当前对象传给self
    那个对象调用的,self就指向谁

    class Person:
        """人类"""
        def sleep(self):
            print("睡")
    
    p1 = Person()
    
    
    四、构造方法和__init__
    魔法方法:python类中,用__开头并且是__结尾的方法
             不需要主动调用,都是自动调用的
    1.__init__方法
    a.是对象方法
    b.自动调用
    c.对对象进行初始化
    
    2.构造方法
    概念:函数名和类名一样的方法
    当我们创建类的时候,系统会自动创建这个类的构造方法,用来创建对象
    当我们通过构造方法创建对象时候,系统会自动调用init方法来创建好的对象进行初始化
    注意:只要调用了构造方法,就是产生新的对象
    

    五、对象属性

    """
    1.什么是对象属性
    a.声明在__init__方法中
    b.self.属性值 = 值
    c.通过对象使用:对象.属性
    语法:
    self.变量名 = 值
    说明:变量就是属性名,这个变量就是对象属性
    
    
    2.对象属性的声明
    如果属性的值会因为对象不同而不一样,就声明成对象属性
    反之就声明类的字段
    """
    
    
    class Person:
        def __init__(self):
            #   Person类的对象属性
            self.name = "小李"
            self.age = 20
    
    p1 = Person()
    print(p1.name, p1.age)
    
    
    
    # 创建对象的时候,决定对象属性的值
    class Person:
        def __init__(self, name):
            self.name = name
            self.age = 0
    
    p2 = Person("老王")
    print(p2.name, p2.age)
    
    
    class Orthogon:
        def __init__(self, length, wide):
            self.length = length
            self.wide = wide
        def area(self):
            return self.length*self.wide
    
        def girth(self):
            return 2*(self.length+self.wide)
    
    
    
    c1 = Orthogon(10,9)
    print("矩形  长:%d  宽:%d" % (c1.length, c1.wide))
    print(c1.area())
    print(c1.girth())
    
    
    
    # 练习:声明一个Point类,拥有属性x坐标和y坐标  功能:求两个点之间的距离
    
    
    class Point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
        def distence(self, other):
            return (((self.x - other.x))**2 + ((self.y - other.y))**2)**0.5
    
    p1 = Point(0, 10)
    p2 = Point(3, 14)
    print(p1.distence(p2))
    >>>>
    小李 20
    老王 0
    矩形  长:10  宽:9
    90
    38
    5.0
    

    六、对象属性的增删改查

    print("\033[5;35;m")
    class Dog:
        def __init__(self, name, color, type):
            self.name = name
            self.color = color
            self.type = type
    
    
    dog1 = Dog("旺达","蓝色","二哈")
    
    """
    1.查
    a.对象.属性    -  属性不存在的时候会报错
    b.getattr(对象,属性名,默认值)  - 当属性不存在的时候,如果设置了默认值,
                                  程序不崩溃,而是返回默认值
    """
    print(dog1.color)
    print(getattr(dog1, "color"))
    print(getattr(dog1, "name1", "caca"))
    """
    2.增、改
    对象.属性 = 值
    setattr(对象,属性名,值)
    注意:属性存在的时候,对应的功能是修改属性的值,当属性不存在的时候是添加属性
    
    """
    
    
    dog1.name = "大白"
    print(dog1.name)
    
    dog1.sex = "母"
    print(dog1.sex)
    
    setattr(dog1, "name", "hahha")
    print(dog1.name)
    
    setattr(dog1, "name2", "huhuh")
    print(dog1.name2)
    
    """
    3.删除
    del 对象.属性
    delattr(对象,属性名)
    """
    
    del dog1.name2
    
    delattr(dog1, "name")
    >>>>
    蓝色
    蓝色
    caca
    大白
    母
    hahha
    huhuh
    
    注意:1对想属性的增删改查,都是针对指定的对象,不会影响其他对象
    2.约束类的对象属性(只能有括号内的属性,其他地方不能添加属性)
    __slots__ = (属性1,属性2,...)
    

    七、类的字段和内置属性

    """
    1.类的字段
    声明在类中,函数外面的变量
    类的字段需要通过类来使用: 类名.字段 - 类中外调用方式都一样
    不会因为对象不同而不一样
    
    
    2.内置类属性
    声明类饿时候,类中已经声明好1的属性(包含类的字段和类的对象)
    
    a. __name__ - 获取类的名字(字符串)
    b. __class__ - 获取对象对象的类(结果是一个类,原来类能做它都能做)
    
    """
    
    
    class Dog:
        """够累"""
        type = "犬科"
    
        def __init__(self, name, age, color):
            self.name = name
            self.age = age
            self.color = color
    
        def eat(self, food):
            print("%s在吃%s" % (self.name, food))
    
        @classmethod
        def shot(cls):
            print("汪汪汪~~")
    
        @staticmethod
        def bite():
            print("狗在跑")
    
    
    dog1 = Dog("萧何", 3, "yello")
    
    
    class_name = Dog.__name__
    print(class_name)
    print(Dog.__class__)
    print(dog1.__class__)
    print(Dog)
    # 获取对象对应的类名
    print(dog1.__class__.__name__)
    >>>>
    Dog
    <class 'type'>
    <class '__main__.Dog'>
    <class '__main__.Dog'>
    Dog
    {'__module__': '__main__', '__doc__': '够累', 'type': '犬科', '__init__': <function Dog.__init__ at 0x000001EB0F810268>, 'eat': <function Dog.eat at 0x000001EB0F8102F0>, 'shot': <classmethod object at 0x000001EB0F80F8D0>, 'bite': <staticmethod object at 0x000001EB0F80F898>, '__dict__': <attribute '__dict__' of 'Dog' objects>, '__weakref__': <attribute '__weakref__' of 'Dog' objects>}
    {'name': '萧何', 'age': 3, 'color': 'yello'}
    (<class 'object'>,)
    __main__
    builtins
    够累
    

    相关文章

      网友评论

          本文标题:类和对象(一)

          本文链接:https://www.haomeiwen.com/subject/adwcqqtx.html