• python类的语法和底层实现


    语法:

    class 类名:

      name = “egon”    # 类属性

      def __init__(self):

        self.age = 18  # 对象属性

        self.__sex = "female"  #对象私有属性

      

      @classmethod

      def eat(cls):  # 类方法,必须用装饰器修饰   ,可以直接   类名.eat()方式调用,对象可以通过 对象名.eat()调用,但内部使用的数据仍然是类的,因此不建议使用这种方式调用

        print("eating")

      def run(self):    #对象方法

        print("running")

    对象名 = 类名()  # 创建对象

    类在定义后,程序运行会从上往下执行,类内部代码都会被执行,方法内部不执行

    类调用自己属性:类名.属性,类名.类方法名()

    对象调用自己属性:对象名.属性,对象名.对象方法名()  ==实则是对象把自己作为参数传给方法去调用

    类运行和对象创建都会创建名称空间,类和对象的名称空间相互独立,在对象创建时如果类的__init__方法没有属性,对象又没有重写类的属性和方法时.语法访问的都是类的属性和方法,自身名称空间没有内容

    class A:
    age = 18
    def __init__(self):
    pass

    a = A()

    print(“A=”,A.__dict__)
    print(“a=”a.__dict__)

    ===

    A= {'__module__': '__main__', 'age': 18, '__init__': <function A.__init__ at 0x0000023F1A498C80>, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}
    a= {}

    如果创建时类的__init__方法有对象属性,则会在对象创建时附带给对象

    class A:
    age = 18
    def __init__(self):
    self.name = "egon"

    a = A()

    print("A=",A.__dict__)
    print("a=",a.__dict__)

    ====

    A= {'__module__': '__main__', 'age': 18, '__init__': <function A.__init__ at 0x000001BDAC8D8C80>, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}
    a= {'name': 'egon'}

  • 相关阅读:
    Mybatis缓存理解
    Spring Batch中job的启动,停止,放弃操作
    spring中xml配置方式和注解annoation方式(包括@autowired和@resource)的区别
    fastjson使用TypeReference示例
    RabbitMQ基础组件和SpringBoot整合RabbitMQ简单示例
    RabbitMQ中各种消息类型如何处理?
    消息队列RabbitMQ基础知识详解
    RabbitMQ的消息确认机制
    rsync+inotify-tools
    Linux Rsync
  • 原文地址:https://www.cnblogs.com/dongxixi/p/10759470.html
Copyright © 2020-2023  润新知