zoukankan      html  css  js  c++  java
  • 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'}

  • 相关阅读:
    mysql 事务只读: Could not retrieve transation read-only status server
    页面加载空白---(failed)net::ERR_INCOMPLETE_CHUNKED_ENCODING
    关于数据库mysql死锁:MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
    高性能分布式锁-redisson的使用
    C/S程序抓包
    linux 安装maven
    linux之jdk安装及环境
    腾讯云服务器搭建之mysql
    mysql去重保留id最小的
    MySQL中文全文检索
  • 原文地址:https://www.cnblogs.com/dongxixi/p/10759470.html
Copyright © 2011-2022 走看看