python中,类的加载顺序

类是在文件加载时,会跟着加载

1  类名

2  类中的变量,从上到下,依次进行

3 加载到方法时,方法内的内容不执行,但是会开辟一个空间用来存储方法内的数据

4 当类内的方法和变量都加载完成时,会将类名指向self参数。

class Student:        # 第一步
def __init__(self,name,age,sex): # 第二步
self.name = name
self.age = age
self.sex = sex
a = 1 # 第三步
b = 2 # 第四步
def fun(): # 第五步
pass
# 第六步,类名指向self
yang = Student('小明',20,'男')

5 如果类中存在两个名称相同的变量或者方法,那么输出后的内容是后加载的变量或者方法的内容

class Student:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
a = 1
b = 2
a = 4 # 变量的输出结果是这个
print(a)
def fun():
pass
def fun():
print("in the func") # 函数的输出结果是这个 yang = Student('小明',20,'男')

类外创建对象时,每个self参数对应各自一个内存空间,并将信息增加到这个内存空间

 

每个对象的内存空间中有个类指针,相当于一个变量,里面存在着一个类的地址
如果自己的空间中有这个名字,那么他就直接在自己的空间中调用

class Student:
country = 'China'
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex zhang = Student('小明',23,'男’)
li= Student('小花',21,'女’)
li.country = 'us'
print(zhang.country) # 输出结果为China
print(li.country) # 输出结果为us

  当自己内存中不存在这个数据的情况下,它会根据指针到类中去查找,如果有就返回,如果没有就报错

  如果每个对象都需要调用同一个变量,那么他们需要的变量必须调用的是类中的变量,而不是自己内存中存在的变量。

主要是对一个对象.名字直接赋值,那么就是在这个对象的空间内创建了新的属性
对一个可变的数据类型内部的变化,那么仍然是所有的对象的类共享改变的成果

class B:
l = [0]
def __int__(self):
self.name= name
b1 = B('小明')
b2 = B('小黑') b1.l[0]+=1 # 因为l是可变类型,所以这类也改变了,类中的变量
print(b2.l[0]) # 结果为1
b1.l = [123] # 这个值就是在b1中的变量,对类中的变量没影响
print(b2.l) # 结果是0

耦合(相互纠缠)

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

类,就可以调用上面的类中的数据和方法

class Student:
def __init__(self,name,num,course):
self.name = name    # 这里就是调用了下面那个类的属性,course的对象成了另一个类的对象的属性
self.num = num
self.course = course class Course:
def __init__(self,name,price,period):
self.name = name
self.price = price
self.period = period
python = Course('python',25000,'6 months')
s1 = Student('小黑',10085,python)
s2 = Student('小洪',10084,python)
s3 = Student('小李',10083,python)
# print(s1.__dict__)
python.price = 30000
python.period = '7 months'

Python的类的组合的更多相关文章

  1. python类的组合

    类的组合,即在类实例化时,将另一个类的实例作为参数传入,这样可以将两个实例关联起来. 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好. 例如,描述一个机器人类,这个大类是由很多 ...

  2. day24 python学习 类 画元,命名空间作用域,组合,人狗大战升级

    类命名空间与对象.实例的命名空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量 动态属性就 ...

  3. 7 python 类的组合

    1.组合与重用性 软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为 1.一个类的属性可以是一个类对象,通常情况下在一个类里面很少定义一个对象就是它 ...

  4. python:类与对象命名空间、面对对象的组合用法

    1,类里可以定义两种属性: #静态属性 #静态属性就是直接在类中定义的变量 #动态属性 #动态属性就是定义在类中的方法 class Course: language = ['Chinese']#静态属 ...

  5. python - class类 (三) 类的组合

    类的组合: #组合 class A1(): def pr(self): return 'a1' class A2(): def pr(self): return 'a2' class A3(): de ...

  6. [ python ] 类的组合

    首先,使用面向对象是一个人狗大战的实例: class Person: def __init__(self, name, hp, aggr, sex): self.name = name self.hp ...

  7. python面向对象之类的组合

    一.python类的组合:给一个类的对象封装一个属性,这个属性是另一个类的对象二.组合的意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系.三.例子模拟英雄联盟写一个游戏人物的类 要求:(1 ...

  8. python - class类 (四) 三大特性之一 :继承

    继承: #继承 #什么时候用继承? # 1.当类之间有显著的不同,并且较小的类是较大的类的所需的组建时,用组合比较好. # 2.当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 # ...

  9. python的类和对象

    一.面向对象和面向过程 1.1面向过程的特点 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 1.2面 ...

随机推荐

  1. Redis面试刁难大全

    转自:https://mp.weixin.qq.com/s?__biz=MzI0MzQyMTYzOQ==&mid=2247483686&idx=1&sn=18dfa0fd08b ...

  2. Egret 4.x 和 5.x 项目共存的方法

    正常来说,安装了对应的引擎之后,4.x的项目和5.x的项目是各自编译互相不影响的. 但是由于引擎的bug,我在实际使用中,出现了编译5.x的项目正常,之后切换到4.x的项目编译时,显示正常编译完毕,但 ...

  3. Mysql 索引问题-日期索引使用

    这两天发现原来的查询效率慢了,使用explain 查看,居然没有使用索引,我的索引是日期类型的,首先想到的是mysql对日期类型的索引的处理机制是不是不同,在where条件里试了几种,发现效果都差不多 ...

  4. 如何使用maven优雅地管理项目版本号

    原文: https://blog.csdn.net/TeleDCOS/article/details/79853782

  5. QLabel设置文字大小和颜色

    https://blog.csdn.net/fm0517/article/details/4805462 ui.label是QLabel ui.label_4->setText("so ...

  6. [转]decorator(HTML装饰器)

    原文地址:https://blog.csdn.net/jzh440/article/details/7770013 1>:每当遇到一个新的技术,首先我会问自己,这个技术是做神马的?用这个技术有神 ...

  7. [转] tomcat 7/8 启动非常慢的解决方法

    在日志中发现启动慢的地方: -- ::] INFO o.s.c.s.DefaultLifecycleProcessor - Starting beans -- ::] INFO o.s.web.con ...

  8. 通过java实现解压zip,rar的代码

    package com.zuidaima.main; import java.io.File; import java.io.FileInputStream; import java.io.FileO ...

  9. 将RAC软件转换为单实例软件

    将RAC软件转换为单实例软件 http://blog.itpub.net/26736162/viewspace-2155632/ 1. Stop database and CRS on both no ...

  10. linux cent os 6.5安装Nginx

    1.下载相关组件 yum install -y gcc gcc-c++ 安装C/C++编译器 wget http://sourceforge.net/projects/pcre/files/pcre/ ...