zoukankan      html  css  js  c++  java
  • 类的初始化

    类的初始化

    类的三大特性有类实例,属性和类方法

    class Person:
        pass

    1.类属性的添加,可以直接在类下面写入,也可以在类外面写入

    class Person:
        # 直接在类下面添加
        age = 23
        height = "180cm"
        hobby = "code"
    
    
    # 在类外面添加 类名.类属性名=属性值
    Person.name = "name"
    # 查看类属性
    print(dir(Person))
    # ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'height', 'hobby', 'name']

    2. 实例化对象

    # 实例化对象
    zgzeng = Person()
    # 实例化对象
    zgzeng = Person()
    
    # 实例对象访问类属性
    print(zgzeng.age)   # 23
    print(zgzeng.name)  # name
    print(zgzeng.hobby)  # code
    
    # 修改属性
    print(id(Person.name))    # 1239214623792
    print(id(zgzeng.name))    # 1239214623792
    zgzeng.name = "zgzeng"
    print(id(zgzeng.name))    #  1239244643440
    print(Person.name)      # name
    print(id(Person.name)) # 123921462379

    我们这里可以知道,如果实例对象下面没有name属性,那么访问的就是类下面的属性,如果通过实例名.name = 属性值,这并没有修改原来的类属性name,而是增加了一个实例属性

    # 添加实例属性
    zgzeng.age = 24
    zgzeng.weight = "55kg"
    print(zgzeng.age)   # 24
    print(zgzeng.weight)  # 55kg

    除了这个方法来添加实例属性之外,还可以在类的内部,通过初始化方法,添加实例属性

    class Person:
        # 直接在类下面添加
        age = 23
        height = "180cm"
        hobby = "code"
    
        # 类的初始化
        def __init__(self, gentle, address):
            self.gentle = gentle
            self.address = address
    # 实例化对象
    zgzeng = Person("female", "Jiangxi")
    
    # 访问实例属性
    print(zgzeng.gentle)      # female
    print(zgzeng.address)     # Jiangxi

    __init__方法是一种初始化的魔术方法,魔术方法有很多种,每一个魔术方法都有他特定的用途,而初始化方法通常被用作来实例对象和定义实例属性的

  • 相关阅读:
    SessionAttributes注解
    数据格式化
    数据类型转换器
    线程的常用方法总结
    线程生命周期
    分析配置DispatcherServlet类时load-on-startup标签作用
    springMVC的执行请求过程
    MyBatis之动态SQL
    MyBatis实现
    Spring框架中的JDK与CGLib动态代理
  • 原文地址:https://www.cnblogs.com/zgzeng/p/12182068.html
Copyright © 2011-2022 走看看